首页 文章

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

提问于
浏览
0

我正在尝试在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)
} </div> </div>

该错误发生在foreach循环中 .

知道我做错了什么吗?

非常感谢,Laziale

更新(增加代码):

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

2 回答

  • 0
    @foreach (AspNetRole userRole in Model.RoleList)
                {
                        @Html.CheckBox(userRole.Name, true)
                        @Html.Label(userRole.Name)
    }

    不要在ViewModel中使用连接到数据库的实体!决不!!它会导致您刚刚遇到的问题 . 单独的图层 . 了解关注点分离separation of concerns

  • 2

    我没有看到你如何填充Model类的猜测是 AspNetRoles 的查询实际上还没有被执行,并且当你开始使用 foreach 迭代列表时这样做了 . db上下文已放置在控制器中,因此无法再在该点获取列表结果 .

    当您在控制器中填充模型数据时,请尝试在填充AspNetRoles的查询末尾执行 .ToList() ,这将立即执行查询 . 希望这可以帮助!

相关问题