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

Automapper to update an existing object as opposed to creating a new one

有什么方法可以使用 Automapper 5.1.1 更新现有对象而不是创建新对象。

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

非常感谢您的帮助。

不建议使用 Automapper 将模型映射到您的实体。如果使用不当,依赖项或信息可能会被覆盖。 但是要随心所欲地使用它,您只需要创建一个从您的模型到您的实体的映射,然后调用

Mapper.Map(myModel, myEntity);

实体映射问题

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

另一个问题是,AutoMapper 使用反射来设置属性。通常,ORM 存在的权利是可以轻松实现 DomainLayer。 DomainLayer 对实体本身有一些验证、计算……。如果现在使用反射设置属性,它将忽略业务逻辑并且不会执行验证、计算....。

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