2012-02-07 21 views
5

Sto cercando la soluzione del problema che sono e probabilmente molti devono trovarsi di fronte.Condividere un modello tra più file edmx (Entity Framework 4.0)

Attualmente sto lavorando a un'applicazione contenente quasi 400 tabelle. L'applicazione consiste di sette progetti di librerie di classi (StudentInfo, libreria, tariffe ecc.) E ognuno ha il proprio file .edmx (composto da 50 tabelle) con strategia di generazione codice = predefinito E un singolo progetto di applicazione Web che fa riferimento ai progetti di libreria di classi .
Ci sono circa 15 tabelle che sono comuni e saranno presenti nel file .edmx in ogni progetto di libreria di classi. Lo spazio dei nomi delle classi/modelli è lo stesso (Campus) in tutti i file .edmx.

Ho creato una classe parziale vale a dire Scuola (che è uno dei tabella/modello comune) che contiene alcuni metodi.

Tuttavia è gettato il seguente errore di tempo di compilazione Il tipo 'Campus.School' esiste sia in 'D: \ Project \ Campus \ CampusStudent \' e 'D: \ Project \ Campus \ CampusLibrary \ bin \ Debug \ CampusLibrary.dll '

Le soluzioni suggerite da altri membri
1) Hanno spazi dei nomi separati per ciascuno dei file .edmx.
2) Utilizzare nomi diversi per i modelli cioè StudentSchool, LibrarySchool ecc.
Entrambe le soluzioni mi obbligheranno a duplicare le classi comuni con i relativi metodi in ciascuno dei progetti della libreria di classi. Qualcuno può aiutarmi?

+0

Immagino che sorga la domanda se davvero si abbia bisogno di quelle 15 tabelle presenti in tutti i file edmx. Non puoi dividere logicamente i modelli per eliminare la ridondanza? –

risposta

6

Ci può essere un modo se si utilizza il modello POCO T4 per la generazione di entità corrente. I POCO in EF possono essere qualsiasi classe in qualsiasi spazio dei nomi che abbia lo stesso nome di entità nel tuo EDMX e che abbiano tutte le proprietà con lo stesso nome di entità in EDMX (inclusi gli stessi tipi e accessibilità per getter e setter).

Definire le 15 classi condivise in un altro assembly (è necessario seguire le regole POCO citate) e fare riferimento a tutti i progetti di libreria. Una volta che hai questo assembly, crea la tua versione del modello POCO T4 che non creerà nuovi file di classe per quelle entità condivise e invece userà le classi dall'assembly referenziato.

L'altra opzione è la creazione manuale e il mantenimento di tutte quelle 400 classi e tipi di contesto EF. Questo è quello che farai se usi la mappatura del solo codice (alias code-first) e non avrai questi problemi.

+0

Grazie per la risposta. Proverò a implementarlo. –

+0

Caro Ladislav, hai un'applicazione di esempio o un collegamento a una risorsa che può aiutarmi a implementarla. In realtà non sono in grado di applicare il tuo suggerimento alla creazione di un modello POCO T4 ** che non creerà nuovi file di classe per quelle entità condivise e utilizzerò invece le classi dell'assembly referenziato ** poiché non sono molto esperto in EF –

+0

Mi dispiace, I non ho un esempio Hai solo bisogno di creare una collezione di nomi di entità fissi e statici che non devono essere creati. Questa raccolta sarà definita direttamente nel modello. Nella parte modello che genera il codice per le entità, verifica che il nome dell'entità non sia presente nella raccolta. Sarà inoltre necessario modificare il codice per generare proprietà di navigazione in altre entità per utilizzare il tipo corretto dall'assembly referenziato. –

Problemi correlati