Configura più di un dbcontext in EF 7

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

Domanda

Ho creato un'applicazione web starter con VS 2015 ctp, e vorrei aggiungere un archivio in memoria per fare qualche test, ma quando provo a leggere i dati, ottengo questo messaggio

I negozi di dati 'SqlServerDataStore' 'InMemoryDataStore' sono disponibili. Un contesto può essere configurato solo per utilizzare un singolo archivio dati. Configurare un archivio dati eseguendo l'override di OnConfiguring nella classe DbContext o nel metodo AddDbContext durante l'impostazione dei servizi.

Come posso fare per creare un secondo datastore? Ora ho questa riga nel metodo ConfigureService

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

Modifica : sembra che lo scenario non sia chiaro. Ho l'identy sql server dbcontext, e voglio aggiungere un secondo dbcontext, totalmente separato, che voglio eseguire in memoria. Sto cercando come configurare due diversi dbcontext, in questo caso utilizzando due diversi datastore.

Il primo è Identity ApplicationDbContext, e un altro è qualcosa del genere:

public class WorkModel : DbContext
{

    public DbSet<Cliente> Clienti { get; set; }
    public DbSet<Commessa> Commesse { get; set; }

    protected override void OnModelCreating(ModelBuilder builder) {
        builder.Entity<Cliente>().Key(cli => cli.ClienteId);
        builder.Entity<Commessa>().Key(cli => cli.CommessaId);
    }
}

O qualsiasi altro dbcontext personalizzato ti piace

Risposta popolare

È possibile utilizzare un tipo DbContext con più DbContext di dati. Tuttavia, non funzionerà bene con le chiamate a .AddDbContext() . Ecco un esempio di come farlo prendendo .ConfigureServices() completamente fuori dall'immagine.

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();
        }
    }
}

È quindi possibile creare un'istanza del contesto specificando quale provider utilizzare.

var inMemoryContext = new MyContext(useInMemory: true);
var sqlServerContext = new MyContext(useInMemory: false);


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché