首页 > 解决方案 > 如何修复静态方法中的 dispose 对象错误?

问题描述

如何从静态函数中获取包含数据库中所有数据和参考数据的列表?我尝试使用db.Configuration.LazyLoadingEnabled = true;但该函数仅返回项目信息并且参考数据为空。

public static Project GetProject(Guid ProjectID)
        {
            if (!ProjectID.Equals(null))
            {
                using (var db = new dbEntity())
                {
                    return db.Projects.Single(Project => Project.Id.Equals(ProjectID));

                }

            }
            return null;
        }

错误:

ObjectContext 实例已被释放,不能再用于需要连接的操作。

我在哪里调用函数:

@{var project = StaticMethods.GetProject(Guid.Parse(ViewContext.RouteData.Values["id"].ToString()));}
@for(var item in project.Users().ToList()){
 ....
}

标签: c#asp.net-mvcentity-framework

解决方案


您可以使用 Linq 预加载并明确表达您想要包含到结果对象图中的内容。急切加载是通过.Include()-method 实现的。

您没有提供实体的模型类,但我假设关系是一对一的(项目具有引用作为属性)。Project以下代码段使用它的Reference-property加载:

public static Project GetProject(Guid ProjectID)
{
    if (!ProjectID.Equals(null))
    {
        using (var db = new dbEntity())
        {
            return db.Projects.Include(r => r.Reference).Single(Project => Project.Id.Equals(ProjectID));
        }
    }
    return null;
}

推荐阅读