2011-12-17 16 views
10

Utilizziamo Entity Framework, Code First e nel nostro database abbiamo diverse tabelle che hanno lo stesso nome ma in schemi diversi.Codice EF, come registrare lo stesso nome di tabella con uno schema diverso?

Ho anche inserito i modelli in due diversi spazi dei nomi.

Come posso registrare queste tabelle nella mia classe DbContext?

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Data.Schema1.Contact>().ToTable("Contact", "schema1"); 
    modelBuilder.Entity<Data.Schema2.Contact>().ToTable("Contact", "schema2"); 
} 

Grazie per il vostro aiuto in anticipo!

risposta

15

Le classi devono avere un nome diverso oppure è necessario utilizzare un contesto separato per ogni schema.

Il motivo è il modello EDM utilizzato internamente. Anche se si sta utilizzando il codice, crea ancora il modello EDM dietro e deve seguire tutte le sue restrizioni e il modo in cui le classi POCO sono abbinate alle entità definite nel modello CSDL. Le entità da EDM sono e le classi POCO sono abbinate per nome di classe (senza spazi dei nomi). Per questo motivo ogni nome di classe mappato nello stesso contesto deve essere unico e lo spazio dei nomi diverso non lo rende diverso.

+0

Il problema è che se metto le classi in due diverse classi di contesto, non posso più unire le due tabelle ... C'è un modo per aggirare questo? Context.Contacts.Include ("Contacts2"); Dove Contact2 proviene da un contesto diverso. – sam360

+0

No, non è possibile eseguire query con contesto incrociato. Quindi l'unica opzione per te è usare nomi diversi per le tue classi - renderà anche il tuo codice molto più leggibile quando devi lavorare con entrambi i tipi con gli stessi metodi. –

+1

Se uso un nome di classe diverso e includo i due nello stesso contesto, EF mi dà un errore: – sam360

Problemi correlati