在实体框架中处理上下文之前更新整个图
本文关键字:更新 上下文 实体 框架 处理 | 更新日期: 2023-09-27 17:53:00
假设有两个简单的实体:
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
s,然后尝试迭代所有关系,CatRelation
的另一端就在那里,但它的导航属性不起作用(context处置)。例如,给定下面的cat var cat1 = cats.First().ToRelations.First().ToCat
,如果我尝试访问cat1.ToRelations
,就会得到一个contextdispose异常。
那么,在处理上下文之前,是否有一种方法可以让上下文修复所有这些导航属性(因为我知道我已经加载了所有CatRelations的所有cat) ?
对于图形,我认为最好加载整个表,然后自己构建图形。即使您可以让EF递归地从数据库中提取所有数据,它也不会为关系重用现有对象(如果它们存在于内存中),而是用相同的数据构造新的实例。这可能不是你想要的,它会导致更多的数据被传输到引导。
在任何情况下,我不认为这是可能的EF拉数据嵌套任意深或可能有循环在他们的关系图。