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

Posted

技术标签:

【中文标题】在 Entity Framework Core 的其他上下文中加载属性【英文标题】:Load properties in other context in 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 属性?

【问题讨论】:

【参考方案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

这是一个不好的做法!

【讨论】:

以上是关于在 Entity Framework Core 的其他上下文中加载属性的主要内容,如果未能解决你的问题,请参考以下文章

在 Entity Framework Core 中使用 [ComplexType]

Entity Framework优化一:引发了“System.Data.Entity.Core.EntityCommandExecutionException”类型的异常

在 Entity Framework Core 中使用 SQL 视图

Entity Framework Core快速开始

Entity Framework Core 快速开始

张高兴的 Entity Framework Core 即学即用:创建第一个 EF Core 应用