Nel mio precedente post ho mostrato una semplice soluzione per separate entità da DbContext, ottenuta "scorporando" i template T4 che sono usualmente generati dall'EDMX. Nella soluzione proposta in pratica ci saremmo trovati nella soluzione riportata nella figura qui accanto.

Tale soluzione, per quanto semplice da ottenere ed efficace, soffre di un problema che chiamaerei "logico". Se avete provato a manipolare un po' le entità mediante l'utilizzo del designer, dopo aver separato i t4, vi sarete resi conto che il diagramma delle entità è situato nell'assembly denominato "Data" anzichè, come ci si potrebbe aspettare, nell'assembly "Entities".

Dico che ce lo si potrebbe aspettare perchè logicamente appare abbastanza ovvio che il diagramma delle entità sia situato nel medesimo progetto in cui sono situate le entità che ne derivano. In realtà la questione è meramente di gusto personale. In effetti la presenza delle entità generate nell'assembly "Entities" non implica che esso debba avere un riferimento a "EntityFramework.dll", infatti tali entità sono "POCO" e quindi non portano alcun legame con l'EDM, se non il fatto di esserne generate. In effetti, potremmo benissimo decidere di scriverle manualmente ed Entity Framework le inghiottirebbe senza colpo ferire.

imageTuttavia, se questa questione vi causasse qualche problema, è del tutto possibile effettuare lo scorporamento nel modo diametralmente opposto. In tal caso sarà opportuno aggiungere il file EDMX al progetto "Entities" e in un secondo momento estrapolare il Samples.Context.tt e portarlo nell'assembly "Data". A questo punto, modificati path e referenze come spiegato nel post precedente (ma nell'assembly contrario) otterremo nuovamente una soluzione compilabile come nella figura successiva.

Il tutto con l'indiscutibile comodità di trovarsi con il designer nello stesso progetto delle entità. Ci troveremmo però ad avere una referenza a EntityFramework.dll indesiderata. Ma tale referenza dipende solo dalla genesi del progetto. Se la rimuovete manualmente vi renderete conto che il progetto compila alla perfezione anche senza.

A questo punto, la scelta tra le due ipotesi è del tutto personale. Lascio a voi ragionarci e magari fatemi sapere le ragioni delle vostre eventuali scelte.

Download: Elite.Samples.Architecture.zip (2,32MB)


Aggiungi Commento