Configurer plus d'un dbcontext dans EF 7

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

Question

J'ai créé une application Web de démarrage avec VS 2015 ctp, et j'aimerais ajouter un magasin en mémoire pour effectuer des tests, mais lorsque j'essaie de lire les données, je reçois ce message.

Les magasins de données 'SqlServerDataStore' '' InMemoryDataStore 'sont disponibles. Un contexte ne peut être configuré que pour utiliser un seul magasin de données. Configurez un magasin de données en substituant OnConfiguring dans votre classe DbContext ou dans la méthode AddDbContext lors de la configuration des services.

Comment puis-je créer un deuxième magasin de données? Maintenant, j'ai cette ligne dans la méthode ConfigureService

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

Edit : On dirait que le scénario n'est pas clair. J'ai l'identy SQL Server dbcontext, et je veux ajouter un deuxième dbcontext, totalement séparé, que je veux exécuter en mémoire. Je cherche comment configurer deux dbcontext différents, dans ce cas en utilisant deux datastores différents.

Le premier est Identity ApplicationDbContext, et un autre ressemble à ceci:

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

Ou quoi que dbcontext personnalisé aimez-vous

Réponse populaire

Il est possible d'utiliser un type DbContext avec plusieurs magasins de données. Il ne jouera cependant pas bien avec vos appels à .AddDbContext() . Voici un exemple de la façon de le faire en prenant .ConfigureServices() entièrement hors de l'image

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

Vous pouvez ensuite instancier votre contexte en spécifiant le fournisseur à utiliser.

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi