实体框架+ AutoMapper(实体到DTO和DTO到实体)

automapper c# dto entity-framework

我在使用EF和AutoMapper时遇到了一些问题。 = /

例如 :

我有2个相关实体(客户和订单),他们是DTO课程:


class CustomerDTO
{
   public string CustomerID {get;set;}
   public string CustomerName {get;set;}
   public IList< OrderDTO > Orders {get;set;}
}

class OrderDTO { public string OrderID {get;set;} public string OrderDetails {get;set;} public CustomerDTO Customers {get;set;} }

//when mapping Entity to DTO the code works Customers cust = getCustomer(id); Mapper.CreateMap< Customers, CustomerDTO >(); Mapper.CreateMap< Orders, OrderDTO >(); CustomerDTO custDTO = Mapper.Map(cust);

//but when i try to map back from DTO to Entity it fails with AutoMapperMappingException. Mapper.Reset(); Mapper.CreateMap< CustomerDTO , Customers >(); Mapper.CreateMap< OrderDTO , Orders >(); Customers customerModel = Mapper.Map< CustomerDTO ,Customers >(custDTO); // exception is thrown here

难道我做错了什么?

提前致谢 !

热门答案

我遇到的问题与EntityCollection引用的更新有关。当从DTO映射到实体时,AutoMapper会创建关系的新实例,而不会取悦EF。

解决了我的问题是配置AutoMapper以使用我的EntityCollection属性的目标值。在你的情况下:

Mapper.CreateMap< CustomerDTO , Customers >().ForMember(c => c.Orders, o => o.UseDestinationValue());

这样,AM将不会创建新的EntityCollection实例,并将使用原始Customer实体附带的实例。

我仍然在努力实现自动化,但是现在它解决了我的问题。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因