在 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 权限。