Una delle problematiche che affligge Entity Framework e di cui ci sono anche parecchi post in merito, è la totale dipendenza delle entities dalla logica di persistenza.
Insomma, se voglio come è normale utilizzare il mio model in altri strati della mia architettura multilivello, creo implicitamente una dipendenza con lo strato di accesso ai dati.
E questo, indipendentemente che voglia realizzare o meno una soluzione il più astratta e loosely coupled possibile, è male.
In particolare se pensiamo a tutta una serie di scenari SOA dove utilizzo dei servizi web che devono dialogare tramite queste entities.
La soluzione esiste, e sono i DTO. Attraverso i DTO rimappo le entity non POCO(Plain Old CLR Objects) di EF su un insieme di classi POCO.
Per semplificare questa operazione e renderla automatica, suggerisco l’uso dell’ Entity Framework POCO Generator.
Questo tool fa parte di un progetto che fornisce anche un adapter per supportare l’utilizzo delle entities POCO con l’ Entity Framework.
Una volta scaricato il progetto, di cui si hanno i sorgenti, si ricompila il tool di generazione ed è poi possibile automatizzare la creazione del nostro nuovo model inserendo sul progetto in Visual Studio una pre-build condition in modo simile a questo:
"$(SolutionDir)EFPocoClassGen\EFPocoClassGen.exe" /mode:PocoClasses /inedmx:"$(SolutionDir)MyProject.Data.Repository\Model\Entities.edmx" /outputdir:"$(ProjectDir)Model/autogenerated" /map:MyProjectModel=$(ProjectName).Model