我有形成树关系的实体。
class MyEntity
{
public int Id {get;set;}
public int ParentId {get;set;}
public virtual MyEntity Parent {get;set;}
public virtual ICollection<MyEntity> Children {get;set;}
}
当这些实体被调用时,没有 AsNoTracking()
关系是固定的。
var entities = MyEntitiesSet.ToList();
所有导航属性和集合都已设置。
但是,如果AsNoTracking()
被称为:
var entities = MyEntitiesSet.AsNoTracking.ToList();
没有设置导航属性。这是可以理解的。但我不明白为什么不覆盖集合和导航属性以提供此代码的关系修复:
entity.Parent = anotherEntity;
在这里,我希望该anotherEntity.Children
集合现在包含实体。唉,正如我的实验所显示的那样,这是错误的期望。
是否可以在不启用更改跟踪的情况下获得所需的行为?
更新 1
我查看了生成的代理并注意到覆盖的集合是代理类型的哈希集。它们不受EF 4 ObjectContext 代理EntityCollection<TEntity>
的支持。
我在这里找到了答案。
DbContext 不会生成修复关系的代理。