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