有没有办法使用Automapper 5.1.1来更新现有对象而不是创建新对象。
例如,我们有一个Customer
实体和一个CustomerViewModel
. 我们想Customer
用CustomerViewModel
字段值更新现有的。
非常感谢您的帮助。
有没有办法使用Automapper 5.1.1来更新现有对象而不是创建新对象。
例如,我们有一个Customer
实体和一个CustomerViewModel
. 我们想Customer
用CustomerViewModel
字段值更新现有的。
非常感谢您的帮助。
不建议使用 Automapper 将模型映射到您的实体。如果使用不当,依赖项或信息可能会被覆盖。但是要根据需要使用它,您只需要创建一个从模型到实体的映射,然后调用
Mapper.Map(myModel, myEntity);
映射到实体问题
我猜你使用像 NHibernate 或 EF 这样的 ORM,然后你的实体是代理,其中引用也是代理等等。现在让我们假设您有一个 ASP.NET MVC 项目,并将您的实体映射到您的 ViewModel。您在视图中将模型显示为表单,但仅显示视图中所需的属性,而不是在 ViewModel 中设置的所有属性。然后用户将表单发回给您,您的控制器将返回 ViewModel,但这次并没有设置所有属性,因为您的视图只知道显示的那些。如果您将 ViewModel 映射回您的实体,则所有未初始化的属性都处于默认状态,并将覆盖来自您的实体的有效数据。
另一个问题是,AutoMapper 使用反射来设置属性。通常,ORM 的存在权是可以轻松实现 DomainLayer。DomainLayer 在实体本身上有一些验证、计算……。如果现在使用反射设置属性,它将忽略业务逻辑,并且不会执行验证、计算....。
所以我的建议是,不要映射到实体;)