Automapper更新现有对象而不是创建新对象

时间:2016-10-15 19:46:45

标签: automapper automapper-5

有没有办法使用 Automapper 5.1.1 来更新现有对象,而不是创建新对象。

例如,我们有一个Customer实体和一个CustomerViewModel。我们希望使用Customer字段值更新现有CustomerViewModel

非常感谢您的协助。

1 个答案:

答案 0 :(得分:1)

不建议使用Automapper将模型映射到您的实体。如果没有明智地使用依赖关系或信息,则可以覆盖它们。 但是要根据需要使用它,您只需要从模型创建一个映射到您的实体,然后调用

Mapper.Map(myModel, myEntity);

映射到实体问题

我猜你使用像NHibernate或EF这样的ORM,然后你的Entites是代理,其中引用也是代理,依此类推。现在让我们假设您有一个ASP.NET MVC项目,并将您的实体映射到ViewModel。您在视图中将模型显示为表单,但只显示视图中所需的属性,而不是ViewModel中设置的所有属性。然后用户将表单发回给您,您的Controller将返回ViewModel,但这次并未设置所有属性,因为您的View只知道显示的那些。如果将ViewModel映射回实体,则所有单元化属性都处于默认状态,并将覆盖您实体的有效数据。

另一个问题是,AutoMapper使用Reflection来设置属性。通常,ORM存在的权利是轻松实现DomainLayer的可能性。 DomainLayer在实体本身上有一些Validations,Calculation ...。如果现在使用Reflection设置属性,它将忽略业务逻辑而不执行验证,计算....将被执行。

所以我的建议是,不要映射到实体;)