Configure más de un dbcontext en EF 7

c# entity-framework-core visual-studio-2015

Pregunta

Creé una aplicación de inicio web con VS 2015 ctp, y me gustaría agregar una tienda en memoria para hacer algunas pruebas, pero cuando intento leer los datos, recibo este mensaje.

Los almacenes de datos 'SqlServerDataStore' 'InMemoryDataStore' están disponibles. Un contexto solo puede configurarse para utilizar un único almacén de datos. Configure un almacén de datos anulando OnConfiguring en su clase DbContext o en el método AddDbContext al configurar los servicios.

¿Cómo puedo hacer para crear un segundo almacén de datos? Ahora tengo esta fila en el método ConfigureService

AddEntityFramework(Configuration)
  .AddSqlServer()
  .AddDbContext<ApplicationDbContext>()
  .AddInMemoryStore()
  .AddDbContext<WorkModel>( options => { options.UseInMemoryStore(persist: true); });

Editar : Parece que el escenario no está claro. Tengo el identy sql server dbcontext, y quiero agregar un segundo dbcontext, totalmente separado, que quiero ejecutar en la memoria. Estoy viendo cómo configurar dos dbcontext diferentes, en este caso usando dos almacenes de datos diferentes.

El primero es Identity ApplicationDbContext, y otro es algo como esto:

AddEntityFramework(Configuration)
  .AddSqlServer()
  .AddDbContext<ApplicationDbContext>()
  .AddInMemoryStore()
  .AddDbContext<WorkModel>( options => { options.UseInMemoryStore(persist: true); });

O cualquier dbcontext personalizado que te guste

Respuesta popular

Es posible usar un tipo DbContext con múltiples almacenes de datos. Sin embargo, no funcionará bien con tus llamadas a .AddDbContext() . Aquí hay un ejemplo de cómo hacerlo tomando .ConfigureServices() completamente fuera de la imagen.

class MyContext : DbContext
{
    bool _useInMemory;

    public MyContext(bool useInMemory)
    {
        _useInMemory = useInMemory;
    }

    protected override void OnConfiguring(DbContextOptions options)
    {
        if (_useInMemory)
        {
            options.UseInMemoryStore(persist: true);
        }
        else
        {
            options.UseSqlServer();
        }
    }
}

A continuación, puede crear una instancia de su contexto especificando qué proveedor utilizar.

class MyContext : DbContext
{
    bool _useInMemory;

    public MyContext(bool useInMemory)
    {
        _useInMemory = useInMemory;
    }

    protected override void OnConfiguring(DbContextOptions options)
    {
        if (_useInMemory)
        {
            options.UseInMemoryStore(persist: true);
        }
        else
        {
            options.UseSqlServer();
        }
    }
}



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é