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