假设我有两个简单的实体:
class Cat
{
int Id;
string Name;
ICollection<CatRelation> ToRelations;
ICollection<CatRelation> FromRelations;
}
class CatRelation
{
int FromCatId;
int ToCatId;
Cat FromCat;
Cat ToCat;
string RelationType;
}
我想要做的是加载所有Cat
及其关系,并让导航属性在整个图表中起作用。到目前为止,我有这样的事情:
context.Cats.Include(cat => cat.ToRelations)
.Include(cat => cat.FromRelations)
.ToList()
在此之后处理上下文。在该行的下方,迭代列表。这适用于进入关系实体,但是如果我,例如,迭代Cat
然后尝试迭代所有关系,CatRelation
的另一端就在那里,但它的导航属性不起作用(ContextDisposed)。在给定以下cat var cat1 = cats.First().ToRelations.First().ToCat
的情况下,如果我尝试访问cat1.ToRelations
,我会得到ContextDisposed -exception。
在处理上下文之前,有没有办法要求上下文修复所有这些导航属性(因为我知道我已经加载了所有CatRelations的所有Cats)?
答案 0 :(得分:0)
对于图表,我认为最好加载整个表,然后自己构建图表。即使你可以让EF递归地从数据库中提取所有数据,它也不会重用现有对象的关系(如果它们存在于内存中),而是构建具有相同数据的新实例。这可能不是你想要的,它会导致更多的数据传输到启动。
在任何情况下,我都不认为有可能让EF提取任意深度嵌套的数据,或者可能在关系图中有周期。