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">&nbsp;</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;
                }
            }

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

在没有看到如何填充Model类的情况下,我的猜测是AspNetRoles的查询实际上还没有执行,并且是在您开始用foreach迭代列表时执行的。数据库上下文已在控制器中释放,因此此时无法再获取列表结果。

在控制器中填充Model数据时,请尝试在填充AspNetRoles的查询末尾执行.ToList(),这将立即执行查询。希望这能有所帮助!

 @foreach (AspNetRole userRole in Model.RoleList)
            {
                    @Html.CheckBox(userRole.Name, true)
                    @Html.Label(userRole.Name)<br />
            }

不要在ViewModel中使用连接到DB的实体!永远不会!!它会导致您刚刚遇到的问题。分层。阅读关注点分离关注点分离