C# 对象实例已被释放(EF)
在EntityFramework中检索项目实体时遇到一些问题。它一直给我Objest实例已被错误处理 我有两个实例,如下图所示 下面的代码给出了错误:C# 对象实例已被释放(EF),c#,entity-framework,entity,dispose,objectdisposedexception,C#,Entity Framework,Entity,Dispose,Objectdisposedexception,在EntityFramework中检索项目实体时遇到一些问题。它一直给我Objest实例已被错误处理 我有两个实例,如下图所示 下面的代码给出了错误: public Project GetProjectyById(int id) { using (var context = new CoderaDBEntities()) { return context.Projects.First(c => c.Id == id);
public Project GetProjectyById(int id)
{
using (var context = new CoderaDBEntities())
{
return context.Projects.First(c => c.Id == id);
}
}
从Project中检索到的所有内容都很好,但是Project对象中的Category对象(关联)向我传递了对象已被处置的错误。发生什么事了
谢谢
编辑:您是否觉得该关联很奇怪?当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);
另一种选择是允许延迟加载,方法是不在using语句中包装DbContext对象,如下所示
public Project GetProjectyById(int id)
{
var context = new CoderaDBEntities()
return context.Projects.First(c => c.Id == id);
}
哦,上帝。。我忘了:哦,我警告过自己要记住这一点,但我还是忘了:(谢谢柔道!顺便问一下..这个关联看起来对你合适吗?因为我也可以用多个项目实例创建一个类别实例(永远不会发生,但仍然如此)我不太确定数据的结构,但是如果一个项目应该只有一个类别,并且几个项目可以在同一个类别下,这是正确的。如果一个项目可以有多个类别,那么多对多的关系将是最好的。不,我希望每个项目有一个类别,所以它确实很好。我会ike说我可以关闭EDMX文件中的延迟加载,但是Category对象为NULL,“这个关联对你来说奇怪吗?”-您的关系状态1个类别可以与许多项目关联,或者换一种说法,每个项目只能有1个类别。对我来说似乎合理-规则应该是什么?