【问题标题】:Load properties in other context in Entity Framework Core在 Entity Framework Core 的其他上下文中加载属性
【发布时间】:2018-02-28 12:46:47
【问题描述】:

我有 2 个独立的数据库,因此在 ASP.Net Core/EFCore 中有 2 个独立的 DbContext。

我有一个对象在一个数据库中,它有一个指向另一个数据库的“外键”。

假设我有一个包含事件的数据库,以及另一个包含城市的地理数据库。 我的活动课程中有一个 cityId。

public class Event
{
  public int Id {get;set;}
  public string Name {get;set;}
  public string CityId {get;set;}
  public virtual City City {get;set;}
}

public class City
{
  public int Id {get;set;}
  public string Name {get;set;}
}

在查询第一个 DbContext 时,是否可以通过某种方式 Include City 属性?

【问题讨论】:

    标签: entity-framework asp.net-core entity-framework-core


    【解决方案1】:

    没有。这是不可能的,您必须独立查询其他上下文。

    var event = eventContext.Events.Find(eventId);
    event.City = geoContext.Cities.Find(event.CityId);
    

    FWIW,您应该将Event 上的City 属性标记为NotMapped。否则,EF 将在与Events 相同的数据库中创建一个Cities 表,并在Events 上向该表添加一个实际的外键,即使City 实际上是由不同的上下文管理的。

    【讨论】:

      【解决方案2】:

      Dbcontext 是数据库的某个范围!

      你只能存储一些 int 值!没有导航属性!

      因为数据库中的所有外键都不能引用到另一个数据库! Ef core 是对数据库的一些抽象!许多 RDBms 不允许外键指向另一个数据库!

      你可以触发某种完整性! Add Foreign Key relationship between two Databases

      这是一个不好的做法!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-19
        • 2017-02-28
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多