在我的ASP.NET MVC4项目中,我得到了一个包含另一个实体列表的实体 .
public virtual IList<SupportTicketMessage> Messages { get; set; }
我可以正常访问消息,但是当我退出dbcontext(退出使用)时,我收到错误:
ObjectContext实例已被释放,不能再用于需要连接的操作 .
我完全理解为什么我得到错误,但我想知道我应该怎么处理它?当我不在dbcontext中时,如何访问消息?
您应该将它们包含在原始查询中 . 您可以使用 Include 执行此操作:
Include
List<Item> items; using (var context = new YourContext()) { items = context.Items.Include(x => x.Messages).ToList(); }
您正在使用 Lazy Loading ,它使用您已经处置的 DbContext . 您需要关闭 Lazy Loading ,或者只使用 Eager Loading 来获取特定条件:
Lazy Loading
DbContext
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);
2 回答
您应该将它们包含在原始查询中 . 您可以使用
Include
执行此操作:您正在使用
Lazy Loading
,它使用您已经处置的DbContext
. 您需要关闭Lazy Loading
,或者只使用Eager Loading
来获取特定条件: