ObjectContext实例已被释放,不能再用于需要连接的操作。 - 清单

时间:2013-08-11 19:09:54

标签: c# .net database entity-framework

在我的ASP.NET MVC4项目中,我得到了一个包含另一个实体列表的实体。

public virtual IList<SupportTicketMessage> Messages { get; set; }

我可以正常访问消息,但是当我退出dbcontext(退出使用)时,我收到错误:

ObjectContext实例已被释放,不能再用于需要连接的操作。

我完全理解为什么我会收到错误,但我想知道如何处理它?当我不在dbcontext中时,如何访问消息?

2 个答案:

答案 0 :(得分:3)

您应该将它们包含在原始查询中。您可以使用Include

执行此操作
List<Item> items;
using (var context = new YourContext())
{
    items = context.Items.Include(x => x.Messages).ToList();
}

答案 1 :(得分:1)

您正在使用Lazy Loading,它使用您已经处置DbContext。 您需要关闭Lazy Loading,或仅针对特定条件使用Eager Loading

class SomeClass
{
    public int ID {get;set;}
    public virtual IList<SupportTicketMessage> Messages { get; set; }
}

var entry = db.Set<SomeClass>().Include("Messages").Single(t => t.ID = 1);