Asp.net mvc 视图中的Foreach循环:ObjectContext实例已被释放,不能再用于需要连接的操作
我正在用实体框架构建一个mvc web应用程序 错误: 中发生“System.ObjectDisposedException”类型的异常 EntityFramework.dll,但未在用户代码中处理 其他信息:ObjectContext实例已被释放 并且不能再用于需要连接的操作 这是实体框架部分: 就像你看到的,我已经包括了“Alineas”和do.ToList()Asp.net mvc 视图中的Foreach循环:ObjectContext实例已被释放,不能再用于需要连接的操作,asp.net-mvc,entity-framework,razor,view,foreach,Asp.net Mvc,Entity Framework,Razor,View,Foreach,我正在用实体框架构建一个mvc web应用程序 错误: 中发生“System.ObjectDisposedException”类型的异常 EntityFramework.dll,但未在用户代码中处理 其他信息:ObjectContext实例已被释放 并且不能再用于需要连接的操作 这是实体框架部分: 就像你看到的,我已经包括了“Alineas”和do.ToList() public IList句柄(RetrieveKoppenForDocumentQuery) { 使用(var db=new Bm
public IList句柄(RetrieveKoppenForDocumentQuery)
{
使用(var db=new BmDataContext())
{
var koppen=db.Kop.Where(s=>s.Document.Id==query.Id)
.包括(s=>s.TegelAfbeelding)
.包括(s=>s.CollageAfbeeldingen)
.包括(s=>s.FinancialeAfbeeldingen)
.包括(s=>s.Alineas)
.ToList();
返回_orderKoppenByIndex(koppen);
}
}
这是KopListItems.cshtml的视图:
@using PGE.Bestuursmonitor.Contracts.DataTypes
@model IList<Kop>
@* Helper for recursively rendering koppen*@
@helper SortableItem(Kop kop)
{
<div class="sortable-item" data-kopid="@kop.Id">
<div class="row">
<div class="col-md-7 title-column">
<i class="fa fa-arrows"></i> @kop.Titel
</div>
<div class="col-md-5">
<div class="col-md-3">
<span>
@kop.KopType
</span>
</div>
<div class="col-md-3">
<span>
@kop.Status
</span>
</div>
<div class="col-md-6">
<span class="pull-right">
@if (@kop.Alineas != null) // on this line I receive the exception
{
// here I would like to do some logic
}
</span>
</div>
</div>
</div>
<div class="sortable-container">
@foreach (var subKop in kop.Koppen)
{
@SortableItem(subKop);
}
</div>
</div>
}
@* Recursively render all kop items *@
<div id="koppen_sortable" class="sortable-container">
@foreach (Kop kop in Model)
{
@SortableItem(kop);
}
</div>
@使用PGE.Bestuursmonitor.Contracts.DataTypes
@模型IList
@*递归呈现koppen的助手*@
@助手可排序项(Kop Kop)
{
@钾滴度
@kop.KopType
@kop.地位
@如果(@kop.Alineas!=null)//在这一行我收到异常
{
//在这里我想做一些逻辑
}
@foreach(kop.Koppen中的var subKop)
{
@可分类项目(子KOP);
}
}
@*递归呈现所有kop项*@
@foreach(模型中的Kop Kop)
{
@可排序项目(kop);
}
这是KoppenList.cshtml的视图:
@model PGE.Bestuursmonitor.ViewModels.Koppen.IKoppenListViewModel
<h1>@Model.DocumentTitel</h1>
@* Render kop list header *@
<div id="koppen_sortable_header">
<div class="row">
<div class="col-md-7"><strong>Titel</strong></div>
<div class="col-md-5">
<div class="col-md-3">
<strong>Type</strong>
</div>
<div class="col-md-3">
<strong>Status</strong>
</div>
<div class="col-md-6">
<span class="pull-right">
<button type="button" id="btn_add_sub" class="btn btn-success" title="Kop aanmaken" role="button" onclick="BM.Koppen.LoadAddKopView(null);">
<i class="fa fa-plus fa-lg"></i> Kop aanmaken
</button>
</span>
</div>
</div>
</div>
</div>
<div id="koppen_sortable_body">
@{ Html.RenderPartial("~/Views/Koppen/KopListItems.cshtml", @Model.Koppen); }
</div>
@* Store document id in html DOM, so javascript can reach it from multiple places *@
<input type="hidden" id="document_id" value="@Model.DocumentId" />
@model PGE.Bestuursmonitor.ViewModels.Koppen.ikopp视图模型
@模型文件
@*渲染kop列表头*@
滴度
类型
状态
科普·安马肯
@{Html.RenderPartial(“~/Views/Koppen/KopListItems.cshtml”,@Model.Koppen);}
@*将文档id存储在HTMLDOM中,以便javascript可以从多个位置访问它*@
控制器中的操作:
[HttpGet]
public ActionResult KoppenList(string id)
{
ViewBag.PageId = id;
Document document = _retrieveStartPcDocumentQueryHandler.Handle(new RetrieveStartPcDocumentQuery());
RetrieveKoppenForDocumentQuery query = new RetrieveKoppenForDocumentQuery
{
Id = document.Id
};
IList<Kop> koppen = _retrieveKoppenForDocumentQueryHandler.Handle(query);
_koppenListViewModel.Koppen = koppen;
_koppenListViewModel.DocumentTitel = document.Titel;
_koppenListViewModel.DocumentId = document.Id;
return View("~/Views/Koppen/KoppenList.cshtml", _koppenListViewModel);
}
[HttpGet]
public ActionResult KoppenList(字符串id)
{
ViewBag.PageId=id;
Document Document=\u retrieveStartPcDocumentQueryHandler.Handle(新的RetrieveStartPcDocumentQuery());
RetrieveKoppenForDocumentQuery=newretrievekoppenfordocumentquery
{
Id=document.Id
};
IList koppen=_retrieveKoppenForDocumentQueryHandler.Handle(查询);
_koppenListViewModel.Koppen=Koppen;
_koppenListViewModel.DocumentTitel=document.Titel;
_koppenListViewModel.DocumentId=document.Id;
返回视图(“~/Views/Koppen/KoppenList.cshtml”,\u koppenListViewModel);
}
正如您在KopListItems.cshtml中看到的,有2个foreach循环。外部foreach循环工作正常,可以读取“Alineas”。显示子项的内部foreach给出了这个奇怪的错误。出什么事了?我卡住了。这就是解决办法。您还需要在子级别上获取alineas和内容:
public IList<Kop> Handle(RetrieveKoppenForDocumentQuery query)
{
using (var db = new BmDataContext())
{
var koppen = db.Kop.Where(s => s.Document.Id == query.Id)
.Include(s => s.TegelAfbeelding)
.Include(s => s.CollageAfbeeldingen)
.Include(s => s.FinancieleAfbeeldingen)
.Include(s => s.Alineas.Select(a => a.Content))
.Include(s => s.Koppen.Select(k => k.Alineas.Select(a => a.Content)))
.Include(s => s.Koppen.Select(k => k.Koppen.Select(x => x.Alineas.Select(a => a.Content))))
.ToList();
return _orderKoppenByIndex(koppen);
}
}
public IList句柄(RetrieveKoppenForDocumentQuery)
{
使用(var db=new BmDataContext())
{
var koppen=db.Kop.Where(s=>s.Document.Id==query.Id)
.包括(s=>s.TegelAfbeelding)
.包括(s=>s.CollageAfbeeldingen)
.包括(s=>s.FinancialeAfbeeldingen)
.Include(s=>s.Alineas.Select(a=>a.Content))
.Include(s=>s.Koppen.Select(k=>k.Alineas.Select(a=>a.Content)))
.Include(s=>s.Koppen.Select(k=>k.Koppen.Select(x=>x.Alineas.Select(a=>a.Content)))
.ToList();
返回_orderKoppenByIndex(koppen);
}
}
这就是解决方案。您还需要在子级别上获取alineas和内容:
public IList<Kop> Handle(RetrieveKoppenForDocumentQuery query)
{
using (var db = new BmDataContext())
{
var koppen = db.Kop.Where(s => s.Document.Id == query.Id)
.Include(s => s.TegelAfbeelding)
.Include(s => s.CollageAfbeeldingen)
.Include(s => s.FinancieleAfbeeldingen)
.Include(s => s.Alineas.Select(a => a.Content))
.Include(s => s.Koppen.Select(k => k.Alineas.Select(a => a.Content)))
.Include(s => s.Koppen.Select(k => k.Koppen.Select(x => x.Alineas.Select(a => a.Content))))
.ToList();
return _orderKoppenByIndex(koppen);
}
}
public IList句柄(RetrieveKoppenForDocumentQuery)
{
使用(var db=new BmDataContext())
{
var koppen=db.Kop.Where(s=>s.Document.Id==query.Id)
.包括(s=>s.TegelAfbeelding)
.包括(s=>s.CollageAfbeeldingen)
.包括(s=>s.FinancialeAfbeeldingen)
.Include(s=>s.Alineas.Select(a=>a.Content))
.Include(s=>s.Koppen.Select(k=>k.Alineas.Select(a=>a.Content)))
.Include(s=>s.Koppen.Select(k=>k.Koppen.Select(x=>x.Alineas.Select(a=>a.Content)))
.ToList();
返回_orderKoppenByIndex(koppen);
}
}
尝试将.AsNoTracking()
添加到EF-query。我尝试添加.AsNoTracking()
到EF-query,但出现相同错误。尝试添加.AsNoTracking()
到EF-query,但出现相同错误。