ObjectContext实例已被释放,不能再用于mvc5视图中需要连接的操作
本文关键字:视图 连接 操作 mvc5 用于 实例 释放 不能 ObjectContext | 更新日期: 2023-09-27 18:29:14
我试图在mvc5视图中对特定的模型属性进行循环,但我遇到了一个错误:
附加信息:ObjectContext实例已被释放并且不能再用于需要连接的操作。
这是我的观点:
@using App.Models
@model App.Portal.WebUI.Models.ManageViewModel
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
<div class="container">
<div class="col-md-9">
<div class="col-md-12">
<div class="form-group">
@Html.LabelFor(m => m.AUser.Id)
<label>@Html.DisplayFor(m => m.AUser.Id)</label>
</div>
<div class="form-group">
@Html.LabelFor(m => m.AUser.FirstName)
@Html.TextBoxFor(m => m.AUser.FirstName)
</div>
<div class="form-group">
@Html.LabelFor(m => m.AUser.PhoneNumber)
@Html.TextBoxFor(m => m.AUser.PhoneNumber)
</div>
<div class="form-group">
</div>
</div>
<div class="col-md-12">
<div class="form-group"> </div>
<div class="form-group">
@Html.LabelFor(m => m.AUser.LastName)
@Html.TextBoxFor(m => m.AUser.LastName)
</div>
<div class="form-group">
@Html.LabelFor(m => m.AUser.Email)
@Html.TextBoxFor(m => m.AUser.Email)
</div>
</div>
</div>
<div class="col-md-3">
@foreach (AspNetRole userRole in Model.AUser.AspNetRoles)
{
@Html.CheckBox(userRole.Name, true)
@Html.Label(userRole.Name)<br />
}
</div>
</div>
错误发生在foreach循环中。
知道我做错了什么吗?
更新
添加的代码:
ManageViewModel model = new ManageViewModel();
if (id.HasValue)
{
using (var db = new DbContext())
{
AspNetUser user = (from p in db.AspNetUsers
where p.Id == id
select p).First();
model.AUser = user;
List<AspNetRole> roles = (from r in db.AspNetRoles
select r).ToList();
model.RoleList = roles;
}
}
在没有看到如何填充Model类的情况下,我的猜测是AspNetRoles
的查询实际上还没有执行,并且是在您开始用foreach
迭代列表时执行的。数据库上下文已在控制器中释放,因此此时无法再获取列表结果。
在控制器中填充Model数据时,请尝试在填充AspNetRoles的查询末尾执行.ToList()
,这将立即执行查询。希望这能有所帮助!
@foreach (AspNetRole userRole in Model.RoleList)
{
@Html.CheckBox(userRole.Name, true)
@Html.Label(userRole.Name)<br />
}
不要在ViewModel中使用连接到DB的实体!永远不会!!它会导致您刚刚遇到的问题。分层。阅读关注点分离关注点分离