在 EF 中动态设置数据源
Dynamicly set the datasource in EF
我正在使用 EF6,并且我有 2 个不同版本的数据库 (MsSQL)。
1 个版本有一个 table 人,另一个没有。
我正在覆盖 OnModelCreating
并使用 modelBuilder.Ignore<Person>();
这适用于为其他 table 调用数据库。
我想要完成的是,当我通过 EF 调用实体时,它 returns 是 class Person 的新实例,而不是尝试连接到数据库并获取其数据。
例如:
using(MyEntity ent = new MyEntity("connectionString")
{
var myPerson = ent.Person.FirstOrDefault(); ==> Depending on version, return the DBData or new Person()
}
我假设您可以将布尔参数添加到上下文的构造函数中:
public MyEntity(string connectionString, bool includePerson)
{
_includePersion = includePerson;
}
现在上下文可以有一个 属性 Person
,或者最好是复数形式 People
:
public IQueryable<Person> People
{
get => _includePerson
? Set<Person>()
: (new[] { new Person() }).AsQueryable();
}
从技术上讲 你现在应该脱离困境了,因为没有导航属性 to/from Person
。但是,恐怕这种结构对下游的影响可能比乍看之下要多。我会尽一切努力避免它。在没有它的情况下向数据库添加一个空的 Person
table 会好得多。这甚至可以由应用程序本身完成,前提是登录的数据库用户具有所需的 DDL 权限。
我正在使用 EF6,并且我有 2 个不同版本的数据库 (MsSQL)。
1 个版本有一个 table 人,另一个没有。
我正在覆盖 OnModelCreating
并使用 modelBuilder.Ignore<Person>();
这适用于为其他 table 调用数据库。
我想要完成的是,当我通过 EF 调用实体时,它 returns 是 class Person 的新实例,而不是尝试连接到数据库并获取其数据。
例如:
using(MyEntity ent = new MyEntity("connectionString")
{
var myPerson = ent.Person.FirstOrDefault(); ==> Depending on version, return the DBData or new Person()
}
我假设您可以将布尔参数添加到上下文的构造函数中:
public MyEntity(string connectionString, bool includePerson)
{
_includePersion = includePerson;
}
现在上下文可以有一个 属性 Person
,或者最好是复数形式 People
:
public IQueryable<Person> People
{
get => _includePerson
? Set<Person>()
: (new[] { new Person() }).AsQueryable();
}
从技术上讲 你现在应该脱离困境了,因为没有导航属性 to/from Person
。但是,恐怕这种结构对下游的影响可能比乍看之下要多。我会尽一切努力避免它。在没有它的情况下向数据库添加一个空的 Person
table 会好得多。这甚至可以由应用程序本身完成,前提是登录的数据库用户具有所需的 DDL 权限。