Entity Framework + AutoMapper (entité à DTO et DTO à entité)

automapper c# dto entity-framework

Question

J'ai eu quelques problèmes avec EF avec AutoMapper. = /

par exemple :

J'ai 2 entités liées (clients et commandes) et ce sont des classes 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

Est-ce que je fais quelque chose de mal?

Merci d'avance !

Réponse populaire

Le problème que j'ai eu était lié aux mises à jour des références EntityCollection. AutoMapper crée une nouvelle instance de la relation lors du mappage du DTO vers l'entité, ce qui ne plaît pas à l'EF.

Ce qui a résolu mon problème était de configurer AutoMapper pour qu'il utilise la valeur de destination pour mes propriétés EntityCollection. Dans ton cas:

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

De cette façon, AM ne créera pas de nouvelle instance EntityCollection et utilisera celle fournie avec l'entité client d'origine.

Je cherche toujours un moyen d'automatiser cela, mais pour l'instant cela résout mon problème.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow