在 Entity Framework Core 中的其他上下文中加载属性

Jea*_*ean 2 entity-framework entity-framework-core asp.net-core

我有 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;}
}
Run Code Online (Sandbox Code Playgroud)

Include查询第一个 DbContext 时是否可以以某种方式访问​​ City 属性?

Chr*_*att 5

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

var event = eventContext.Events.Find(eventId);
event.City = geoContext.Cities.Find(event.CityId);
Run Code Online (Sandbox Code Playgroud)

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