1つのOracleデータベースで複数のスキーマを処理できるようにdbContextを設定しようとしています。私は、次のを作ってみたので、私は1つのモノリシックdbContextファイルを望んでいませんでした:Entity Frameworkと複数のスキーマ
public class oraDbContext : DbContext
{
static oraDbContext() {
Database.SetInitializer<oraDbContext>(null);
}
public oraDbContext(string connName)
: base("Name=" + connName) { }
public _schema1 schema1 = _schema1.Instance;
public _schema2 schema2 = _schema2.Instance;
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
schema1.OnModelCreating(modelBuilder);
schema2.OnModelCreating(modelBuilder);
}
}
スキーマファイルは次のようになります。しかし
public sealed class _schema1
{
private static readonly _schema1 instance = new _schema1();
static _schema1() { }
private _schema1() { }
public static _schema1 Instance {
get {
return instance;
}
}
public DbSet<someTable> someTable { get; set; }
internal void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Configurations.Add(new someTableMap());
}
}
、私はクエリを実行しようとすると、エラー:Value cannot be null
を取得します。それが参照している値は_schema1のsomeTable
プロパティです。
aどうすればこの問題を解決できますか?
B.もっと良い解決策はありますか?
編集:私はここにしたいことは次のようなコードを書くための能力である - someTableは両方のスキーマで同じである
var query1 = from p in db.schema1.someTable
select p;
var query2 = from p in db.schema2.someTable
select p;
。私たちのデータベースでは、同一またはほぼ同じ列を持つ全く同じテーブルを持ついくつかのスキーマがあります。 5つのスキーマからプルするクエリを作成している場合、5つの異なる接続を意味する可能性があるため、各スキーマごとに個別のdbContextを作成する必要はありません。この同じクエリをまっすぐなSQLで書いていたら、1つの接続で5つの異なるスキーマからデータを取り出すことができました。これが私がここで達成したいことです。私は、次の記事に出くわした
GetOrAdd()を使用してコードを読み取り可能に縮退する場合は+1。それを使用するという事実に下線を引いてみたいですか?クエリの2つのコンポーネントの結果を結合するToList()は、異なるコンテキスト(< - エンティティ・フレームワーク、おそらくは他のormsも含む)からのクエリを組み合わせようとするため、非常に重要です。 – xDisruptor