DbContexts múltiples en ASP.NET vNext y EF7

asp.net asp.net-mvc c# entity-framework entity-framework-core

Pregunta

Estoy tratando de llevarme bien con la construcción de sistemas web con ASP.NET vNext utilizando MVC 6 y EF7. Estoy viendo este tutorial: http://stephenwalther.com/archive/2015/01/17/asp-net-5-and-angularjs-part-4-using-entity-framework-7

En la página, verá cómo agregar un dbContext a un proyecto y se registra en el archivo de inicio de esta manera:

// Register Entity Framework
services.AddEntityFramework(Configuration)
        .AddSqlServer()
        .AddDbContext<MoviesAppContext>();

Y la clase de contexto se ve así:

// Register Entity Framework
services.AddEntityFramework(Configuration)
        .AddSqlServer()
        .AddDbContext<MoviesAppContext>();

Todo funciona bien, pero ahora necesito agregar un DbContext adicional. Aunque no sé cómo registrar este contexto adicional, EF lo utilizará y podrá utilizarlo en mi proyecto.

Digamos que he creado un nuevo contexto como este:

// Register Entity Framework
services.AddEntityFramework(Configuration)
        .AddSqlServer()
        .AddDbContext<MoviesAppContext>();

¿Cómo procedo a registrarlo para usarlo en mi proyecto?

Respuesta popular

Nota importante: la sintaxis para configurar los servicios de Entity Framework 7 ha cambiado desde esta publicación, que fue precisa en las últimas rondas beta. Sin embargo, la misma idea debería aplicarse a la nueva sintaxis.

Esto es lo que he estado haciendo:

services.AddEntityFramework().AddSqlServer()
                .AddDbContext<DataContextA>(options => options.UseSqlServer(Configuration.Get("StorageSettings:SQLConnectionString")))
                .AddDbContext<DataContextB>(options => options.UseSqlServer(Configuration.Get("StorageSettings:SQLConnectionString")));

donde StorageSettings:SQLConnectionString es una cadena de conexión para una base de datos SQL Express. Actualmente, tengo DataContextA y DataContextB compartiendo la misma base de datos, pero puede mantenerlos separados. Si quieres seguir usando el método de Configuration (del cual no estaba al tanto, ¡qué bueno!) Podrías hacer algo como esto:

services.AddEntityFramework().AddSqlServer()
                .AddDbContext<DataContextA>(options => options.UseSqlServer(Configuration.Get("StorageSettings:SQLConnectionString")))
                .AddDbContext<DataContextB>(options => options.UseSqlServer(Configuration.Get("StorageSettings:SQLConnectionString")));

con

services.AddEntityFramework().AddSqlServer()
                .AddDbContext<DataContextA>(options => options.UseSqlServer(Configuration.Get("StorageSettings:SQLConnectionString")))
                .AddDbContext<DataContextB>(options => options.UseSqlServer(Configuration.Get("StorageSettings:SQLConnectionString")));

Tanto DataContextA como DataContextB se pueden inyectar en su controlador:

services.AddEntityFramework().AddSqlServer()
                .AddDbContext<DataContextA>(options => options.UseSqlServer(Configuration.Get("StorageSettings:SQLConnectionString")))
                .AddDbContext<DataContextB>(options => options.UseSqlServer(Configuration.Get("StorageSettings:SQLConnectionString")));



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é