在我的 ASP.NET MVC4 项目中,我得到了一个包含另一个实体列表的实体。
public virtual IList<SupportTicketMessage> Messages { get; set; }
我可以很好地访问这些消息,但是当我退出 dbcontext(退出使用)时,我得到了错误:
ObjectContext 实例已被释放,不能再用于需要连接的操作。
我完全理解为什么我会收到错误,但我想知道我应该如何处理它?当我不再在 dbcontext 中时,如何访问这些消息?
在我的 ASP.NET MVC4 项目中,我得到了一个包含另一个实体列表的实体。
public virtual IList<SupportTicketMessage> Messages { get; set; }
我可以很好地访问这些消息,但是当我退出 dbcontext(退出使用)时,我得到了错误:
ObjectContext 实例已被释放,不能再用于需要连接的操作。
我完全理解为什么我会收到错误,但我想知道我应该如何处理它?当我不再在 dbcontext 中时,如何访问这些消息?
您应该将它们包含在原始查询中。您可以使用以下方法执行此操作Include:
List<Item> items;
using (var context = new YourContext())
{
items = context.Items.Include(x => x.Messages).ToList();
}
您正在使用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);