ObjectContext被释放,不能再使用了

时间:2015-06-09 14:36:17

标签: c# asp.net-mvc-3 entity-framework-6

示例代码:

private static list;
public void SetList ()
{
var query = Container.Advices.Where ();
list= query.ToList();
}

public void doStuff ()
{
var temp= list.where (...).ToList ();
}

问题情况:

当我第一次调用SetList时,一切正常。 现在,第二个是SetList调用。我可以在方法中看到,有所有对象,但在第二种方法中,doStuff是抛出的异常:ObjectContext被释放... 我不明白为什么。我看到数据已正确加载到列表中,而不是一秒钟之后我就可以了。 t加载导航属性。

我该如何解决这个问题?

修改

我做什么: 1.我第一次调用SetList()来初始化列表 doStuff一切正常 3.我使用SetList重新创建列表 4.在尝试使用导航属性时,下一次对doStuff的调用以异常结束:

var temp = list.where ( m=> m.Address.id==addressId).ToList ()

第二次失败,异常:处理ObjectContext。 ..

1 个答案:

答案 0 :(得分:1)

问题可能是默认导航属性延迟加载。这意味着在您尝试访问它们之前,它们实际上并未由数据库返回。您用来创建ObjectContext的{​​{1}}正在某个地方处置,这是一件好事,因为您不会在上下文的生命周期中过长。

list上的下一个调用错误的原因是您要遍历列表并访问list.where(m => m.Address.id == addressId).ToList()属性。由于尚未加载,因此EF将尝试使用Address中实体的父ObjectContext查询数据库。由于处理了父上下文,因此无法做到这一点。

更好且可能性能更高的方法是在加载list时急切加载Address属性。

将原始查询更改为如下所示:

list