I'm working in a disconnected scenario, but I noticed that disposing an object context does not release attached entities. As a result, subsequent operations often fail because of this.
So to solve this, I detach everything myself when the object context is being disposed:
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;
}
However, the side effect is that the object graph gets detached completely, but I really want to keep the graph!
It seems I don't find a solution for this, is it true that it can't be done?
We had this problem as well; you cannot have part of a graph attached to an EF context. Have you considered loading up data initially in a detatched state? The context is then used as a stateless repository of data and nothing else.
You can load up data as detatched initially as follows:
myDataContext.MyEntitySet.MergeOption = MergeOption.NoTracking;
精彩评论