ASP.NET vNext和EF7中的多個dbContexts


我正在努力與使用MVC 6和EF7的ASP.NET vNext構建Web系統相處。我正在看這個教程: http//stephenwalther.com/archive/2015/01/17/asp-net-5-and-angularjs-part-4-using-entity-framework-7

在頁面上,您將看到如何將dbContext添加到項目中,並在啟動文件中註冊,如下所示:

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

上下文類看起來像這樣:

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

這一切都很好,但現在我需要添加額外的DbContext。雖然我不知道如何註冊這個額外的上下文,以便它將被EF使用並可能在我的項目中使用。

假設我已經創建了一個像這樣的新上下文:

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

我如何繼續註冊它以便在我的項目中使用?

熱門答案

重要說明:自本文發布以來,配置Entity Framework 7服務的語法已經發生了變化,截至最近幾輪測試結果都是準確的。同樣的想法仍應適用於新語法。

這是我一直在做的事情:

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

其中StorageSettings:SQLConnectionString是SQL Express數據庫的連接字符串。目前,我有DataContextA和DataContextB共享相同的數據庫,但您可以將它們分開。如果你想繼續使用Configuration方法(我不知道,非常酷!)你可以做這樣的事情:

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

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

DataContextADataContextB都可以注入您的控制器:

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




許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因