3

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

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

非常感谢您的帮助。

4

1 回答 1

2

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

Mapper.Map(myModel, myEntity);

映射到实体问题

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

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

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

于 2016-10-17T09:08:13.063 回答