C# ObjectContext实例已被释放,无法再用于需要连接的操作。-列表

C# ObjectContext实例已被释放,无法再用于需要连接的操作。-列表,c#,.net,database,entity-framework,C#,.net,Database,Entity Framework,在我的ASP.NETMVC4项目中,我得到了一个实体,其中包含另一个实体的列表 public virtual IList<SupportTicketMessage> Messages { get; set; } 公共虚拟IList消息{get;set;} 我可以很好地访问这些消息,但是当我退出dbcontext(使用退出)时,会出现以下错误: ObjectContext实例已被释放,不能再用于需要连接的操作 我完全理解我为什么会出错,但我想知道我应该如何处理它?当我不再在dbco

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

public virtual IList<SupportTicketMessage> Messages { get; set; }
公共虚拟IList消息{get;set;}
我可以很好地访问这些消息,但是当我退出dbcontext(使用退出)时,会出现以下错误:

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


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

您使用的是
延迟加载
,它使用您已经释放的
dbcontext
。 您需要关闭
延迟加载
,或仅使用
快速加载
来满足特定条件:

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);
class-SomeClass
{
公共int ID{get;set;}
公共虚拟IList消息{get;set;}
}
var entry=db.Set().Include(“Messages”).Single(t=>t.ID=1);

您使用的是
延迟加载
,它使用您已经释放的
DbContext
。 您需要关闭
延迟加载
,或仅使用
快速加载
来满足特定条件:

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);
class-SomeClass
{
公共int ID{get;set;}
公共虚拟IList消息{get;set;}
}
var entry=db.Set().Include(“Messages”).Single(t=>t.ID=1);

您应该在原始查询中包含它们。您可以使用
Include
执行此操作:

List<Item> items;
using (var context = new YourContext())
{
    items = context.Items.Include(x => x.Messages).ToList();
}
列表项;
使用(var context=newyourcontext())
{
items=context.items.Include(x=>x.Messages.ToList();
}

您应该在原始查询中包含它们。您可以使用
Include
执行此操作:

List<Item> items;
using (var context = new YourContext())
{
    items = context.Items.Include(x => x.Messages).ToList();
}
列表项;
使用(var context=newyourcontext())
{
items=context.items.Include(x=>x.Messages.ToList();
}

我猜您已将
延迟加载设置为
true
。尝试快速加载(使用
Include(“NavigationCollectionPropertyName”)
我想您已经将
延迟加载设置为
true
。尝试快速加载(使用
Include(“NavigationCollectionPropertyName”)