无法从 Models.<entityviewmodel> 转换为 Models.<entity>

cannot convert from Models.<entityviewmodel> to Models.<entity>

我正在使用数据库优先方法并且我想使用我自己的验证我尝试修改生成的模型,它有效:

但是,如果我需要从数据库更新模型,我的验证代码当然会覆盖实体数据模型并且属性会消失。我如何通过自己的验证来克服这种情况?

所以我最终做了什么,我在同一个命名空间内创建了一个,我命名为 ClientViewModel,在这个 class 中,我拥有所有自定义验证及其工作,直到我尝试保存并出现以下错误:

The best overloaded method match for 'System.Data.Entity.DbSet.Add(myapp.Models.Client)' has some invalid arguments

这是我的控制器:

[HttpPost]
   [ValidateAntiForgeryToken]
   public ActionResult Create(ClientViewModel client)
   {
      if (ModelState.IsValid)
      {
        try
         {
            using (var context = new db_entities())
            {
               //more code...        
               db.Clients.Add(client); //<<<ERROR
               db.SaveChagnes();
             }
          }
        }
    }

您需要将视图模型转换为 EF 跟踪的模型class。假设您的 ViewModel 和 Model 都有 3 个属性 x、y 和 z,您可以看到如下内容:

public Client ConvertViewModelToModel(ClientViewModel vm)
    {
        return new Client ()
        {
            x = vm.x,
            y = vm.y,
            z = vm.z
        };
    }

然后调用它来转换视图模型:

var clientModel = ConvertViewModelToModel(vm);

然后您可以将此 clientModel 添加到 db.Clients 集合并保存它。

我最终使用了 AutoMapper 并且在没有使用 AutoMapper 的情况下它是一种乏味的情况它不仅减少了工作量,而且还限制了如此大量的执行时间要执行的行数。

这是我更新后的代码:

  Client clientModel = Mapper.Map<ClientViewModel, Client>(client);
  db.Clients.Add(clientModel);

检查正确创建的数据库。如果没有,请尝试:

>Enable-migrations
>add-migration model
>update-database

也许就这样解决了。我试过了,解决了我的问题。