对象实例已被处置(EF)

Mit*_*hel 2 c# entity dispose entity-framework objectdisposedexception

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

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

以下代码给出了错误:

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

从Project检索的所有东西都很好,但是Project对象里面的Category对象(关联)传递给我的对象已被处理错误.这是怎么回事?

谢谢!

编辑:这种关联看起来很奇怪吗?

Jud*_*udo 5

当DBContext对象已被处理时,看起来您正在尝试使用延迟加载来访问类别相关对象(将其包装在using语句中将在它超出范围时将其处理掉).延迟加载是指EF仅在代码中请求相关实体时才加载相关实体.

要避免这种情况,您应该使用Include语句显式加载相关对象:

return context.Projects.Include("Category").First(c => c.Id == id);
Run Code Online (Sandbox Code Playgroud)

或者你可以用强类型的方式加载它,如下所示,但一定要添加'using System.Data.Entity; '参考

return context.Projects.Include(x => x.Category).First(c => c.Id == id);
Run Code Online (Sandbox Code Playgroud)

另一种方法是通过不将DbContext对象包装在using语句中来允许延迟加载,如下所示.

  public Project GetProjectyById(int id)
    {
        var context = new CoderaDBEntities() 
        return context.Projects.First(c => c.Id == id);       
    }
Run Code Online (Sandbox Code Playgroud)