想象一下,有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")
。
答案 0 :(得分:5)
不。这是不可能的。 EF十分遵守DDD(域驱动设计)。上下文是您的工作单元,但是它被称为“上下文”,因为它是实现DDD中“绑定上下文”概念的类。换句话说,您应在应用程序的每个子域中拥有一个上下文,并且该上下文应完全封装该子域。在两个上下文之间交叉表示您没有正确细分您的域。
如果两个实体确实是同一子域的一部分,则它们应该存在于相同的上下文中。如果不是这样,那么无论如何都不能引用另一个。