如何解决静态方法中的处理对象错误?

时间:2019-04-08 08:41:22

标签: c# asp.net-mvc entity-framework

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

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()){
 ....
}

2 个答案:

答案 0 :(得分:0)

您可以使用Linq急切加载并明确表示要包含在结果对象图中的内容。通过.Include()-方法可以实现较早的加载。

您没有提供实体的模型类,但是我假设关系是一对一的(Project具有Reference作为属性)。以下摘要加载了Project属性Reference

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;
}

答案 1 :(得分:0)

简而言之,延迟加载问题。

它是由以下原因引起的:

  1. 您打开 DbContext
  2. 执行您的查询'
  3. 返回您的Project
  4. 访问一个 virtual 属性,该属性试图在 DbContext 被处理后延迟加载相关资源。

您将必须执行以下一项操作