来自另一个DbContext的导航属性

Ale*_*ksa 0 c# entity-framework-core

想象一下,有2个DbContext:

DbContextA {
    DbSet<Person> Persons { get; set; }
}

DbContextB {
    DbSet<Group> Groups{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,实体中是否可能Person具有如下导航属性Group

class Person {
    public int GroupId { get; set; }
    public Group Group { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个将一个DbContext划分为多个具有单独实体的DbContext的请求,但是在进入之前,我想知道导航属性是否可以在上下文之间工作,所以我不需要更改查询,因为我在诸如之类的查询中使用了导航属性persons.Where( p => p.Group.Name == "GroupName")

Chr*_*att 5

不行,不可能 EF十分遵守DDD(域驱动设计)。上下文是您的工作单元,但是它被称为“上下文”,因为它是实现DDD中“绑定上下文”概念的类。换句话说,您的应用程序的每个子域都应具有一个上下文,并且该上下文应完全封装该子域。在两个上下文之间交叉表示您没有正确细分您的域。

如果两个实体确实属于同一子域,则它们应该存在于相同的上下文中。如果不是这样,那么无论如何都不能引用另一个。