Entity framework ObjectContext实例已被释放,不能再用于需要连接的操作
由于EF的更改跟踪和延迟加载功能,我的一个查询遇到了问题。问题是,在得到查询结果之后,我使用AutoMapper将域对象映射到我的业务模型中,但它一直抛出异常,因为上下文已被释放 ObjectContext实例已被释放,无法再使用 用于需要连接的操作 当我在调试器中查看结果集合时,我看到它是Entity framework ObjectContext实例已被释放,不能再用于需要连接的操作,entity-framework,lazy-loading,entity-framework-5,objectcontext,change-tracking,Entity Framework,Lazy Loading,Entity Framework 5,Objectcontext,Change Tracking,由于EF的更改跟踪和延迟加载功能,我的一个查询遇到了问题。问题是,在得到查询结果之后,我使用AutoMapper将域对象映射到我的业务模型中,但它一直抛出异常,因为上下文已被释放 ObjectContext实例已被释放,无法再使用 用于需要连接的操作 当我在调试器中查看结果集合时,我看到它是DynamicProxy的列表,而不是实际的实体。我试图停止更改跟踪,但没有帮助。这是我的密码: public List<ContentTypeColumn> GetContentType
DynamicProxy
的列表,而不是实际的实体。我试图停止更改跟踪,但没有帮助。这是我的密码:
public List<ContentTypeColumn> GetContentTypeColumns(Int64 contentTypeId)
{
List<ContentTypeColumn> result = new List<ContentTypeColumn>();
using (SCGREDbContext context = new SCGREDbContext())
{
ContentType contentType = context.ContentTypes.Include("Parent").AsNoTracking().FirstOrDefault(x => x.Id.Equals(contentTypeId));
result.AddRange(contentType.ContentTypeColumns.ToList());
while (contentType.Parent != null)
{
result.AddRange(contentType.Parent.ContentTypeColumns.ToList());
contentType = contentType.Parent;
}
}
return result.ToList();
}
公共列表GetContentTypeColumns(Int64 contentTypeId)
{
列表结果=新列表();
使用(SCGREDbContext=new SCGREDbContext())
{
ContentType ContentType=context.ContentTypes.Include(“父”).AsNoTracking().FirstOrDefault(x=>x.Id.Equals(contentTypeId));
AddRange(contentType.ContentTypeColumns.ToList());
while(contentType.Parent!=null)
{
AddRange(contentType.Parent.ContentTypeColumns.ToList());
contentType=contentType.Parent;
}
}
返回result.ToList();
}
注意:如果您需要查看此操作中涉及的我的域模型,您可以参考如果您需要停止延迟加载和动态更改跟踪,您可以简单地将其关闭:
using (SCGREDbContext context = new SCGREDbContext())
{
context.Configuration.ProxyCreationEnabled = false;
...
}
延迟加载?这会导致这种情况。我知道,在这种特殊情况下,我试图避免延迟加载,但我找不到解决方法。有什么建议吗?可能是完美的复制品!这帮我节省了很多时间!