14

Sto usando Entity Framework e vorrei usare TPH con le interfacce. Quindi ho creato un'interfaccia, "Cliente", che mappa le classi "SimpleCustomer" e "DiscountedCustomer" come mostrato di seguito. Di seguito è riportato il codice del builder del modello. Da quello che capisco, non possiamo usare le interfacce con Entity Framework, quindi qual è il modo migliore?Entity Framework con interfacce non funziona: qual è il modo migliore per gestire lo stesso?

modelBuilder.Entity<ICustomer>().ToTable("tblCustomer") 
.Map<SimpleCustomer>(x => x.Requires("CustomerType").HasValue("S")) 
.Map<DiscountedCustomer>(x => x.Requires("CustomerType").HasValue("D")); 

La mia applicazione utilizza le interfacce in tutta l'interfaccia utente e vorrebbe avere un tipo di fusione liscia per Entity Framework. Quindi è il modo migliore?

risposta

9

Entity Framework non supporta TPH con interfacce (mi dispiace per aver dichiarato l'ovvio). Questa potrebbe non essere la soluzione che stai cercando, ma la inserirò comunque perché sembra essere l'unica soluzione a partire dal 16 aprile 2015.

In Entity Framework 6, il più vicino che puoi ottenere è - Utilizzare le classi astratte anziché le interfacce. Questo article parla di TPH in EF in modo molto dettagliato.

Il mio suggerimento è se si desidera utilizzare le interfacce e mantenere la gerarchia e si desidera comunque eseguire un typecasting regolare, considerare l'utilizzo di automapper con classi astratte. In questo modo l'interfaccia utente continuerà a utilizzare le interfacce, ma può essere mappata al modello di dominio utilizzando i profili dell'autore. Fino a quando arriva il supporto dell'interfaccia. Non sarà veloce se l'applicazione è di grandi dimensioni e ha centinaia di modelli di dominio, quindi è necessario pianificarla con saggezza.

Se lo si sta creando da zero, è possibile utilizzare semplicemente classi astratte dal livello dell'interfaccia utente a DAL senza alcun ri-factoring.

+0

Attualmente sto facendo lo stesso e lascia che accetti questo come una risposta e ti concedo la taglia per ora. –

Problemi correlati