Entity Framework y migración con múltiples esquemas en un solo contexto

c# ef-code-first entity-framework entity-framework-6

Pregunta

Estoy desarrollando una aplicación multiusuario con Entity Framework Code First. Cada inquilino tendrá un esquema diferente en la base de datos, pero la aplicación tendrá un Contexto único y un modelo para todos los inquilinos.

Entity Framwork 6 puede usar múltiples esquemas con múltiples contextos en la misma base de datos, pero no encontré la manera de usar múltiples esquemas con un solo Contexto.

He generado migraciones (por línea de comando) al esquema predeterminado "dbo". Me gustaría actualizar otros esquemas usando estas migraciones.

Respuesta popular

Si bien estoy de acuerdo en que el contexto múltiple es absolutamente la mejor manera de avanzar (y así es como tengo mi propia configuración de proyectos), quería responder a su pregunta original sobre cómo usar múltiples esquemas en un solo contexto:

Dentro de su configuración de mapeo para cada modelo, puede llamar 'ToTable (myTableName, mySchema)' para modificar el esquema al que pertenece una tabla:

public class MyEntityMap : EntityTypeConfiguration<MyEntity>
{
    public MyEntityMap ()
    {
        HasKey(t => t.MyId);
        Property(t => t.MyId)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        ToTable("MyEntity", "MySchema");
    }
}

Esto le permitirá establecer el esquema para cada tabla por separado mientras mantiene un solo contexto.

Ya que dijo que desea usar el mismo modelo en diferentes esquemas, eso lo hace un poco más difícil sin saber más acerca de su configuración. Si está tratando solo con un puñado de clientes y no le importa mantener sus esquemas en el código, simplemente puede crear un mapa para cada esquema (como se muestra arriba) y luego agregar un nuevo DbSet para cada cliente. Si está tratando de hacer esto escalable para un gran número de clientes, le sugeriría buscar un enfoque diferente porque su dba puede gritar cuando ve más de 100 tablas idénticas en diferentes esquemas en lugar de usar una columna customerID en cada tabla .




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué