C# 释放dbcontext后,将集合分配给导航属性时出错

C# 释放dbcontext后,将集合分配给导航属性时出错,c#,entity-framework,ado.net-entity-data-model,C#,Entity Framework,Ado.net Entity Data Model,我有一个首先使用EF5数据库的多层应用程序—ADO.NET和MVC4,当我尝试在没有EF的情况下加载一些属性时,我遇到了一个问题。我的意思是,假设我有一个实体A,比如: A { public int id {set; get;} public string name {set; get;} public virtual ICollection<B> B { get; set; } } 这发生在我的业务逻辑层上,因此dbcontext很久以前就被处理过了

我有一个首先使用EF5数据库的多层应用程序—ADO.NET和MVC4,当我尝试在没有EF的情况下加载一些属性时,我遇到了一个问题。我的意思是,假设我有一个实体A,比如:

A
{
     public int id {set; get;}
     public string name {set; get;}
     public virtual ICollection<B> B { get; set; }
}
这发生在我的业务逻辑层上,因此dbcontext很久以前就被处理过了

但是当我试图访问B属性时,我只得到一个
System.ObjectDisposedException
和一条错误消息,上面写着

你知道怎么解决这个问题吗

ObjectContext实例已被释放,无法再使用 用于需要连接的操作


这是因为
A
对象是在既有
ProxyCreationEnabled=true
又有
LazyLoadingEnabled=true
的上下文中加载的。因此,
A
对象是一个代理对象,当其子集合被访问时,它仍然试图触发延迟加载

因此,您可以禁用其中一个属性,以防止在释放上下文后延迟加载。或者,或者另外,您可以使用
Include
加载
a
及其
B
集合:

a = context.As.Include(a => a.B).Single(...);

这是因为
A
对象是在既有
ProxyCreationEnabled=true
又有
LazyLoadingEnabled=true
的上下文中加载的。因此,
A
对象是一个代理对象,当其子集合被访问时,它仍然试图触发延迟加载

因此,您可以禁用其中一个属性,以防止在释放上下文后延迟加载。或者,或者另外,您可以使用
Include
加载
a
及其
B
集合:

a = context.As.Include(a => a.B).Single(...);