Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 已处置EF对象_Entity Framework_Entity Framework 5 - Fatal编程技术网

Entity framework 已处置EF对象

Entity framework 已处置EF对象,entity-framework,entity-framework-5,Entity Framework,Entity Framework 5,我有mvc3应用程序,我首先使用EF5代码进行数据访问 我确实收到了以下错误消息,但我不知道也不明白为什么 有人能解释为什么会这样,我怎样才能避免再次出现这个问题 ObjectContext实例已被释放,无法再用于需要连接的操作。 我的数据访问代码是: var list = new List<Task>(); using (var db = new SiteContext()) { var queryableAll = db.Tasks.AsQueryable();

我有mvc3应用程序,我首先使用EF5代码进行数据访问 我确实收到了以下错误消息,但我不知道也不明白为什么

有人能解释为什么会这样,我怎样才能避免再次出现这个问题

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

我的数据访问代码是:

var list = new List<Task>();

using (var db = new SiteContext())
{
    var queryableAll = db.Tasks.AsQueryable();

    // setup order descending
    queryableAll = (orderByTimeDescending)
            ? queryableAll.OrderByDescending(x => x.Created)
            : queryableAll.OrderBy(x => x.Created);

    list.AddRange(queryableAll
        .Include("Customer")
        .Include("Collection").ToList());

}
return list;
我的部分项目线

@model ProjectManagement.DataAccess.Models.Task
<tr>
    <td>@Model.TaskId</td>
    <td>
        @Html.ActionLink(Model.Name, "ManageTask", "Task", new { id = Model.TaskId }, null)
    </td>
    <td>
        @Model.Collection.Name
    </td>
    <td>@Model.Customer.Name</td>
</tr>
@model ProjectManagement.DataAccess.Models.Task
@Model.TaskId
@ActionLink(Model.Name,“ManageTask”,“Task”,new{id=Model.TaskId},null)
@Model.Collection.Name
@Model.Customer.Name
更新:

我在渲染局部视图时遇到异常。
我知道,如果我删除using并将其留给垃圾收集器处理,它就会工作。但是我不喜欢这种解决方案。

您正在处理页面呈现之前的上下文。如果您随后执行任何需要活动上下文的操作(例如,引用延迟加载的属性,但还有许多其他示例——查看异常中的调用堆栈以查看是什么设置了它),那么您将看到此错误

避免这种情况的通常方法是将DI容器配置为围绕HTTP请求确定上下文生存期的范围,然后使用构造函数注入将上下文传递给方法,而不是在using块中显式实例化/处理它


有关示例,请参阅MarkSeeman的书.NET中的依赖注入

我同意克雷格关于问题原因的看法。确保这些问题不会发生的一个好方法是创建一个单独的、简单的POCO视图模型类,该类只包含视图所需的信息。然后您可以在控制器中填充它(这也给了您一个钩子来验证它是否被正确填充),然后您可以将它传递给视图。如果您的视图模型类不依赖于EF类,则不存在仍然需要SiteContext的风险。

在哪里发生异常?@usr:我已更新了问题,并提供了问题的答案,看起来您在部分视图中遇到了问题。可能它正在访问的某些未加载的导航属性task@lazyberezovsky它不访问包含在获取中的集合。@cpo您能为部分视图提供代码吗?
@model ProjectManagement.DataAccess.Models.Task
<tr>
    <td>@Model.TaskId</td>
    <td>
        @Html.ActionLink(Model.Name, "ManageTask", "Task", new { id = Model.TaskId }, null)
    </td>
    <td>
        @Model.Collection.Name
    </td>
    <td>@Model.Customer.Name</td>
</tr>