2011-12-17 24 views
10

Estamos utilizando Entity Framework, Code First y en nuestra base de datos tenemos varias tablas que tienen el mismo nombre pero en diferentes esquemas.Código EF primero, ¿cómo registrar el mismo nombre de tabla con un esquema diferente?

También puse los modelos en dos espacios de nombres diferentes.

¿Cómo puedo registrar estas tablas en mi clase DbContext?

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

¡Gracias por su ayuda con anticipación!

Respuesta

15

Sus clases deben tener un nombre diferente o debe usar un contexto separado para cada esquema.

El motivo de esto es el modelo EDM utilizado internamente. Incluso si usa código primero, aún crea el modelo EDM subyacente y debe seguir todas sus restricciones y la forma en que las clases POCO se corresponden con las entidades definidas en el modelo CSDL. Las entidades de EDM son y las clases de POCO se corresponden con el nombre de clase (sin espacios de nombres). Debido a eso, cada nombre de clase mapeado en el mismo contexto debe ser único y el espacio de nombres diferente no hace que sea un nombre de clase diferente.

+0

El problema es que si pongo las clases en dos clases de contexto diferentes, ya no puedo unir las dos tablas ... ¿Hay alguna forma de evitar eso? Context.Contacts.Include ("Contacts2"); Donde Contact2 es de un Contexto diferente. – sam360

+0

No, no puede hacer consultas de contexto cruzadas. Entonces, la única opción para usted es usar diferentes nombres para sus clases; también hará que su código sea mucho más legible cuando tenga que trabajar con ambos tipos en los mismos métodos. –

+1

Si utilizo un nombre de clase diferente e incluyo los dos en el mismo contexto, EF me da un error: – sam360

Cuestiones relacionadas