単一の Oracle データベースで複数のスキーマを処理できるように dbContext を設定しようとしています。モノリシックな dbContext ファイルは 1 つも必要なかったので、次のように考えました。
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
。参照している値は、someTable
_schema1 のプロパティです。
A.どうすれば修正できますか?
B.より良い解決策はありますか?
編集:ここで欲しいのは、次のようなコードを書く能力です-
var query1 = from p in db.schema1.someTable
select p;
var query2 = from p in db.schema2.someTable
select p;
someTable は両方のスキーマで同じです。私たちのデータベースには、同一またはほぼ同一の列を持つまったく同じテーブルを持つスキーマがいくつかあります。5 つのスキーマからプルするクエリを作成している場合、5 つの異なる接続を意味する可能性があるため、スキーマごとに個別の dbContext を作成したくありません。この同じクエリを単純な SQL で記述していた場合、1 つの接続で 5 つの異なるスキーマからデータを取得できます。これが、ここで達成したいことです。