我在EntityFramework中检索我的Project实体时遇到了一些问题。它一直给我Objest实例已被处置错误。
我有2个实例,如下图所示。
以下代码给出了错误:
public Project GetProjectyById(int id)
{
using (var context = new CoderaDBEntities())
{
return context.Projects.First(c => c.Id == id);
}
}
Project中的所有内容都被检索得很好,但Project对象(关联)中的Category对象传递给我的对象已被处置错误。发生了什么事?
谢谢!
编辑:这种关联对你来说有点奇怪吗?
答案 0 :(得分:5)
当DBContext对象已被处理时,看起来您正在尝试使用延迟加载来访问类别相关对象(将其包装在using语句中将在它超出范围时将其处理掉)。 延迟加载是指EF仅在代码中请求相关实体时才加载相关实体。
要避免这种情况,您应该使用Include语句显式加载相关对象:
return context.Projects.Include("Category").First(c => c.Id == id);
或者您可以以强类型方式加载它,如下所示,但一定要添加'using System.Data.Entity; '参考
return context.Projects.Include(x => x.Category).First(c => c.Id == id);
另一种方法是允许通过不将DbContext对象包装在using语句中进行延迟加载,如下所示。
public Project GetProjectyById(int id)
{
var context = new CoderaDBEntities()
return context.Projects.First(c => c.Id == id);
}