Entity Framework + AutoMapper (Entity для DTO и DTO для Entity)

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. AutoMapper создает новый экземпляр отношения при отображении из DTO в Entity, и это не радует 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
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow