来自另一个DbContext的导航属性

时间:2019-10-23 13:32:11

标签: c# entity-framework-core

想象一下,有2个DbContext:

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

DbContextB {
    DbSet<Group> Groups{ get; set; }
}

在这种情况下,是否可以在实体Person中将导航属性设置为Group,如下所示:

class Person {
    public int GroupId { get; set; }
    public Group Group { get; set; }
}

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

1 个答案:

答案 0 :(得分:5)

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

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