gpt4 book ai didi

.net - 当禁用更改跟踪但生成代理时,是否可以启用关系修复

转载 作者:行者123 更新时间:2023-12-01 03:54:52 25 4
gpt4 key购买 nike

我有形成树关系的实体。

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

我查看了生成的代理并注意到覆盖集合是代理类型的哈希集。它们不受 EntityCollection<TEntity> 的支持什么是真实的 EF 4 ObjectContext proxies .

我找到了答案 here .
DbContext 不会生成修复关系的代理。

最佳答案

数据库上下文 生成修复关系的代理。

证明在这里:http://connect.microsoft.com/VisualStudio/feedback/details/760609/poco-navigation-proxies-should-fixup-the-other-end-automatically

然而,当实体附加到上下文加载相关实体时:

context.ASet.ToList();
context.BSet.ToList();

自动设置关系。

关于.net - 当禁用更改跟踪但生成代理时,是否可以启用关系修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18255157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com