2009-10-05 4 views
11

Ho iniziato a sviluppare un'applicazione utilizzando Entity Framework.Come supportare i modelli di più Entity Framework nella stessa soluzione

Ho aggiunto uno spazio dei nomi per contenere tutto il mio codice di gestione utente MyApp.Users, ad esempio, e questo contiene un modello che è stato contrassegnato all'interno dello spazio dei nomi e espone solo funzionalità al resto del sistema tramite interfacce. Va tutto bene.

Ora desidero definire un altro spazio dei nomi per gestire una specifica logica aziendale. Voglio che contenga un modello che conosce solo un altro sottoinsieme dello schema del database, tuttavia questo sottoinsieme si sovrappone alla tabella Users. Quando provo ad accedere al secondo modello nel progetto principale, ottengo questo errore:

"Un EdmType non può essere mappato a classi CLR più volte"

sento che questo non dovrebbe comportarsi in questo modo. Dopo tutto, la tabella degli utenti viene referenziata da 2 diversi modelli in 2 diversi spazi dei nomi ... in che modo VS sa anche che la tabella viene referenziata due volte?

Qualcuno ha visto questo problema e forse ha capito come consentire allo stesso tavolo di esistere in diversi modelli?

In alternativa - Questo rappresenta un tipo di Anti-Pattern di Entity Framework che dovrei evitare?

risposta

8

al fine di riutilizzare i tipi in più modelli, è necessario seguire alcuni specific steps outlined in this blog post. Come molte altre funzionalità avanzate di Entity Framework, questo funziona, ma non funziona così bene con il progettista della GUI. Vedi anche this intro post per ulteriori idee su come gestire modelli più grandi.

+2

Il collegamento al post del blog è rotto –

4

È possibile avere più modelli, ma non possono sovrapporsi a . Il messaggio di errore è abbastanza chiaro: se si sovrappongono, come potrebbe EF sapere su quale tipo di CLR mappare - non c'è modo di dirlo, davvero.

Nel tuo caso, potresti provare a estrarre la tabella Users in un suo terzo modello, se deve essere utilizzata anche in altri due posti.

Marc