假设我有两个简单的实体:
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
s及其关系,并使导航属性在整个图形中正常工作。到目前为止,我有这样的事情:
context.Cats.Include(cat => cat.ToRelations)
.Include(cat => cat.FromRelations)
.ToList()
此后,将处理上下文。再往下走,列表就会遍历。这对于到达关系实体很有效,但是例如,如果我迭代Cat
s,然后尝试迭代所有关系,则该对象的另一端在CatRelation
那里,但是其导航属性不起作用(ContextDisposed )。像下面这样,给定以下cat var cat1 = cats.First().ToRelations.First().ToCat
,如果我尝试访问cat1.ToRelations
,则会得到ContextDisposed -exception。
那么,有没有办法让我在处理上下文之前要求上下文修复所有这些导航属性(因为我知道我已经加载了所有CatRelations中的所有Cats)?
对于图,我认为最好加载整个表,然后自己构造图。即使您可以让EF从数据库中递归地提取所有数据,它也不会为关系使用现有的对象(如果它们存在于内存中),而是使用相同的数据构造新的实例。那可能不是您想要的,这将导致更多的数据被传输到引导中。
无论如何,我认为无法获得EF来提取任意嵌套的深度或关系图中可能存在循环的数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句