我正在尝试设置我的 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 个不同的模式中提取数据,这就是我想在这里完成的。