Я пытаюсь настроить свой dbContext, чтобы он мог обрабатывать несколько схем в одной базе данных Oracle. Мне не нужен один монолитный файл dbContext, поэтому я придумал следующее:
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 в обеих схемах одинакова. В нашей базе данных есть несколько схем с теми же таблицами, которые имеют одинаковые или почти одинаковые столбцы. Я не хочу создавать отдельный dbContext для каждой схемы, потому что это потенциально может означать 5 разных соединений, если я создаю запрос, который извлекает из 5 схем. Если бы я писал этот же запрос в прямом SQL, я мог бы вытащить данные из 5 различных схем с одним соединением и тем, что я хотел бы сделать здесь.