c# - 对象实例已被处置(EF)

标签 c# entity-framework entity dispose objectdisposedexception

我在 EntityFramework 中检索项目实体时遇到一些问题。它一直给我 Objest 实例已被处置错误。

我有 2 个实例,如下图所示。 enter image description here

下面的代码给了我错误:

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

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

谢谢!

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

最佳答案

看起来您正在尝试使用延迟加载来访问与类别相关的对象,而 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);       
    }

关于c# - 对象实例已被处置(EF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217954/

相关文章:

php - Twig 和 Symfony2 - 找不到实体

c# - 为什么我不能执行 foreach(DataTable.Rows 中的 var Item)?

c# - specflow如何处理多个参数?

entity-framework - 如何最好地将 Entity Framework 迁移部署到 Web 场

entity-framework - f#:LINQ to Entities 中仅支持无参数构造函数和初始值设定项

c# - 为 2 个链接表创建模型的 ASP.Net MVC 错误

c# - 如何使用 C# 删除 Excel 复制焦点

c# - Azure队列存储 Visual Studio 本地主机从QueueClient发送到毒队列的所有队列消息

design-patterns - 具有实体树的域聚合根

entity-framework-4 - Entity Framework 4 - ApplyCurrentValues<TEntity> 与 ObjectStateManager.ChangeObjectState