ASP.NET vNextとEF7の複数のdbContexts

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

質問

MVC 6とEF7を使ってASP.NET vNextでWebシステムを構築しようとしています。私はこのチュートリアルを見ています: http : //stephenwalther.com/archive/2015/01/17/asp-net-5-and-angularjs-part-4-usingentity-framework-7

このページでは、プロジェクトにdbContextを追加する方法を見ていき、次のようにスタートアップファイルに登録されています:

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

コンテキストクラスは次のようになります。

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

すべて正常に動作しますが、今では追加のDbContextを追加する必要があります。この追加のコンテキストを登録する方法はわかりませんが、EFで使用され、プロジェクトで使用できるようになります。

たとえば、次のような新しいコンテキストを作成したとします。

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

その後、プロジェクトで使用するために登録するにはどうすればいいですか?

人気のある回答

重要な注意事項: 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メソッド(これはかなりクール!)を使い続けたいなら、次のようなことができます:

{
    "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"
        }
    }
}

〜と

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

DataContextADataContextB両方をコントローラに注入することができます:

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


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ