實體框架+ 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實體附帶的實例。

我仍然在努力實現自動化,但是現在它解決了我的問題。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因