首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从Models.<entityviewmodel>转换为Models.<entity>

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

Stack Overflow用户
提问于 2015-01-30 21:48:39
回答 3查看 7.7K关注 0票数 2

我使用的是数据库优先( Database )方法,我想使用我自己的验证--我试图修改生成的模型,它可以:

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

因此,我最后所做的是在同一个名称空间中创建了一个名称空间,并命名了ClientViewModel,在这个类中,我进行了所有的自定义验证及其工作,直到我尝试保存并得到以下错误:

'System.Data.Entity.DbSet.Add(myapp.Models.Client)‘的最佳重载方法匹配有一些无效的参数

这里是我的控制器,看起来像:

代码语言:javascript
复制
[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();
             }
          }
        }
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-31 16:08:59

我最终使用了AutoMapper,这是一种不使用AutoMapper的繁琐情况--它不仅减少了工作量,而且限制了执行这么多行所占用的执行时间。

以下是我更新的代码:

代码语言:javascript
复制
  Client clientModel = Mapper.Map<ClientViewModel, Client>(client);
  db.Clients.Add(clientModel);
票数 1
EN

Stack Overflow用户

发布于 2015-01-30 23:18:00

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

代码语言:javascript
复制
public Client ConvertViewModelToModel(ClientViewModel vm)
    {
        return new Client ()
        {
            x = vm.x,
            y = vm.y,
            z = vm.z
        };
    }

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

代码语言:javascript
复制
var clientModel = ConvertViewModelToModel(vm);

然后,您可以继续将这个clientModel添加到db.Clients集合中,然后继续保存它。

票数 1
EN

Stack Overflow用户

发布于 2015-06-07 02:27:06

检查要正确创建的数据库。如果没有,那就试试:

代码语言:javascript
复制
>Enable-migrations
>add-migration model
>update-database

也许可以通过这个解决。我试过了解决了我的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28245182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档