我正在构建一个ASP.NET MVC 3应用程序,我有一个看起来像这样的模型:
public partial class Flavor
{
// ...
public string Name { get; set; }
public bool HasNuts {get; set; }
public virtual ICollection<SaleData> Sales {get; set;}
// ...
}
它从db中检索一些数据:
public PartialViewResult Details(int id)
{
using (var db = new IceCreamDBFlavors())
{
Flavor someFlavor = db.Flavors.Find(id);
someFlavor.Sales = db.Sales.Where(c => c.FlavorID == id).ToList();
return PartialView("details", someFlavor);
}
}
在视图上我做这样的事情:
<fieldset>
<legend>Sales Data</legend>
@foreach (var sale in Model.Sales)
{
<div>Weekly</div>
<div>@sale.Weekly</div>
}
</fieldset>
如果我没有检索销售数据,我的Flavor数据显示没有错误,但添加调用以检索销售数据列表会导致错误 "The ObjectContext instance has been disposed and can no longer be used for operations that require a connection." .
我已经阅读了其他一些关于此的帖子,并猜测我在这里遗漏了一些东西 . 我相信这个错误是由于延迟加载而发生的,至少基于我在这里和其他地方所读到的内容 . 我相信,在返回PartialView并检查对象之前在Controller中设置断点会导致评估发生,所以一切都显示为我想要的 .
我的印象是 ToList()
调用将强制Sales集合被填写 . 由于我没有注释掉,我认为问题仍然与此有关,当View试图迭代销售时,它可以'吨 . 我在这里纠正吗?我想我以为我正在强迫进行评估 . 我该如何解决这个问题?
2 回答
不要处置从ObjectContext继承的IceCreamDBFlavors类,它需要的生命周期大于当前允许的生命周期 .
更改
至
我怀疑
Flavor
有其他集合(而不仅仅是Sales
),实际上它正在访问它破坏的那些集合 .在这里,您只替换Sales,而其他集合或复杂属性仍然需要对象上下文 .