Plusieurs dbContexts dans ASP.NET vNext et EF7

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

Question

J'essaie de créer des systèmes Web avec ASP.NET vNext à l'aide de MVC 6 et EF7. Je regarde ce tutoriel: http://stephenwalther.com/archive/2015/01/17/asp-net-5-and-angularjs-part-4-using-entity-framework-7

Sur la page, vous verrez comment ajouter un dbContext à un projet et il est enregistré dans le fichier de démarrage comme suit:

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

Et la classe de contexte ressemble à ceci:

public class MoviesAppContext:DbContext
{
    public DbSet<Movie> Movies { get; set; }
}

Tout fonctionne bien, mais il me faut maintenant ajouter un autre DbContext. Bien que je ne sache pas comment enregistrer ce contexte supplémentaire afin qu'il soit utilisé par EF et qu'il puisse être utilisé dans mon projet.

Disons que j'ai créé un nouveau contexte comme celui-ci:

public class MyNewSuper:DbContext
{
    public DbSet<Model1> Model1 { get; set; }
    public DbSet<Model2> Model2 { get; set; }
}

Comment puis-je l'enregistrer pour l'utiliser dans mon projet alors?

Réponse populaire

Remarque importante: La syntaxe de configuration des services Entity Framework 7 a été modifiée depuis cette publication, qui était exacte au cours des dernières campagnes bêta. La même idée devrait néanmoins s'appliquer à la nouvelle syntaxe.

Voici ce que j'ai fait:

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

StorageSettings:SQLConnectionString est une chaîne de connexion pour une base de données SQL Express. Actuellement, DataContextA et DataContextB partagent la même base de données, mais vous pouvez les garder séparément. Si vous voulez continuer à utiliser la méthode de Configuration (ce dont je n'étais pas au courant, plutôt cool!), Vous pouvez faire quelque chose comme ceci:

{
    "Data": {
        "DefaultConnectionA": { 
            "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=ContextADatabase;Trusted_Connection=True;MultipleActiveResultSets=true",
        "DefaultConnectionB": { 
            "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=ContextBDatabase;Trusted_Connection=True;MultipleActiveResultSets=true"
        }
    },
    "EntityFramework": {
        "DataContextA": {
            "ConnectionStringKey": "Data:DefaultConnectionA:ConnectionString"
        }            
        "DataContextB": {
            "ConnectionStringKey": "Data:DefaultConnectionB:ConnectionString"
        }
    }
}

avec

services.AddEntityFramework(Configuration)
                .AddSqlServer()
                .AddDbContext<DataContextA>()
                .AddDbContext<DataContextB>();

DataContextA et DataContextB peuvent être injectés dans votre contrôleur:

public class MyController: Controller {
    public MyController(DataContextA dataA, DataContextB dataB) {
        // Do stuff
    }
}



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