2

我在 EntityFramework 中检索我的项目实体时遇到了一些问题。它不断给我 Objest 实例已被处理错误。

我有 2 个实例,如下图所示。在此处输入图像描述

下面的代码给了我错误:

    public Project GetProjectyById(int id)
    {
        using (var context = new CoderaDBEntities())
        {
            return context.Projects.First(c => c.Id == id);
        }
    }

Project 中的所有内容都可以正常检索,但是 Project 对象(关联)中的 Category 对象向我提供了对象已被处理的错误。这是怎么回事?

谢谢!

编辑:这个关联对你来说看起来很奇怪吗?

4

1 回答 1

5

当 DBContext 对象已被释放时,您似乎正在尝试使用延迟加载访问与 Category 相关的对象(将其包装在 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);       
    }
于 2012-11-04T11:11:28.070 回答