我正在尝试设置我的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());
}
}
然而,当我尝试执行查询时,出现错误:值不能为空
。它所指的值是_schema1中someTable
属性。
A. 我该如何修复它?
B. 是否有更好的解决方案?
Edit: 我想要的是能够编写以下代码的能力 -
var query1 = from p in db.schema1.someTable
select p;
var query2 = from p in db.schema2.someTable
select p;
在我们的数据库中,有几个模式具有完全相同的表,这些表具有相同或几乎相同的列。我不想为每个模式创建单独的dbContext,因为如果我创建一个从5个模式拉取数据的查询,这可能意味着5个不同的连接。如果我用直接的SQL编写此查询,我可以使用单个连接从5个不同的模式中提取数据,这正是我想在这里实现的。