有没有办法使用 Automapper 5.1.1 来更新现有对象,而不是创建新对象。
例如,我们有一个Customer
实体和一个CustomerViewModel
。我们希望使用Customer
字段值更新现有CustomerViewModel
。
非常感谢您的协助。
答案 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设置属性,它将忽略业务逻辑而不执行验证,计算....将被执行。
所以我的建议是,不要映射到实体;)