在 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”类型的异常