在EF中动态设置数据源

时间:2018-08-03 10:53:43

标签: c# entity-framework dbset

我正在使用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()
}

1 个答案:

答案 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权限,这甚至可以由应用程序本身完成。