Entity framework 实体框架:分离但保留对象图
我在一个断开连接的场景中工作,但我注意到处理对象上下文并不会释放附加的实体。因此,后续操作往往会因此而失败 为了解决这个问题,我自己在处理对象上下文时分离所有内容:Entity framework 实体框架:分离但保留对象图,entity-framework,dispose,detach,Entity Framework,Dispose,Detach,我在一个断开连接的场景中工作,但我注意到处理对象上下文并不会释放附加的实体。因此,后续操作往往会因此而失败 为了解决这个问题,我自己在处理对象上下文时分离所有内容: public void Dispose() { // detaching is not really needed, because we have short living object contexts var objectStateEntries = _context.UnderlyingConte
public void Dispose()
{
// detaching is not really needed, because we have short living object contexts
var objectStateEntries =
_context.UnderlyingContext.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged);
objectStateEntries.ToList().ForEach(o => { if (o.Entity != null)
{
_context.UnderlyingContext.Detach(o.Entity);
}});
_context.Dispose();
_context = null;
}
然而,副作用是对象图完全分离,但我真的想保留该图
似乎我没有找到解决办法,这是真的,它不能做吗?我们也有这个问题;不能将图形的一部分附加到EF上下文。您是否考虑过在初始状态下加载数据?然后,上下文被用作无状态的数据存储库,而不是其他任何东西 您可以按以下方式加载最初已删除的数据:
myDataContext.MyEntitySet.MergeOption = MergeOption.NoTracking;
你能更好地解释这个问题吗?在我看来,这一切都不必要。“未发布”实体是如何导致问题的?好吧,假设我在断开连接的客户端中创建了一个复杂的实体,将其发送到使用实体框架创建该实体的后端。这将起作用,更新的实体将被发送回断开连接的客户端。然后,客户机更新实体,更改某些属性,可能向集合添加和删除实体。回到后端,我然后重新附加所需的内容,但我经常会得到一个错误,即实体已经附加。但是如果我尝试使用TryGetObjectStateEntry检查这个,它也会抛出一个异常,告诉我它不在上下文中!(tbc)因此,似乎存在冲突,因为我试图使用仍然附加到先前对象上下文的实体。如果在处理第一个上下文时首先分离此实体,则不会有任何问题。因此,我得出结论,如果一个实体要在另一个上下文中使用,它应该总是被分离。是吗?我用这个代码修复了一个内存泄漏。实体框架实体上下文在dispose上清除其内部缓存。如果上下文中的实体图足够大,垃圾收集器可能不会收集内存,从而导致内存泄漏。在处置上下文时分离/分离缓存实体修复了这个问题。