我有一个实体
public partial class FUNCTION_METADATA
{
public FUNCTION_METADATA()
{
this.VALUE_METADATA = new HashSet<VALUE_METADATA>();
}
public int ID_FUNCTION_METADATA { get; set; }
public virtual ICollection<VALUE_METADATA> VALUE_METADATA { get; set; }
}
这个ICollection为VALUE_METADATA。
我尝试使用Include-Statement加载它,但我需要15秒。载入。 所以我加载了整个FUNCTION_METADATA,并在一个单独的加载中整个VALUE_METADATA,并希望在代码中设置集合 - 需要8秒。 但导航属性不起作用。在调试器中,我看到了ObjectDisposedException。 如何在不使用ObjectExposedException的情况下从代码中设置集合?
这是带有include的代码 - 一切运行良好:
LoadAllItemsToCache<FUNCTION_METADATA>(includeProperties: nameof(VALUE_METADATA));
这是带有两个单独加载的代码和一些Linq - 使用Value_METADATA集合不起作用:
LoadAllItemsToCache<FUNCTION_METADATA>();
LoadAllItemsToCache<VALUE_METADATA>();
var allValueMetadata = GetAllItemsFromCache<VALUE_METADATA>().GroupBy(dvm => dvm.ID_FUNCTION_METADATA).ToDictionary(grp => grp.Key, grp => grp.ToList());
var allFunctionMetadata = GetAllItemsFromCache<FUNCTION_METADATA>();
foreach (var functionMetadata in allFunctionMetadata)
{
if (allValueMetadata.ContainsKey(functionMetadata.ID_FUNCTION_METADATA))
{
functionMetadata.VALUE_METADATA = new HashSet<VALUE_METADATA>(allValueMetadata[functionMetadata.ID_FUNCTION_METADATA]);
}
}
函数LoadAllItemsToCache和GetAllItemsFromCache是我的DBRepository的一部分。
我理解ObjectExposedException的原因,但我不知道它为什么会出现在这里。为什么实体试图在上下文中获取集合?