Dar*_*ren 1 c# asp.net razor asp.net-mvc-3
我收到此错误:
无法访问已处置的对象.
对象名:'Dispose后访问的DataContext.'.
对于此代码:
...
ViewData["AdSlots"] = dbc.AdSlots.Where(a => a.PublisherId == publisherId).ToList();
dbc.Dispose();
Run Code Online (Sandbox Code Playgroud)
当我将此代码用于视图时:
grid.Column(header: "Ad Size", style: "ad-size", format: @<text>@item.AdSize.Width x @item.AdSize.Height</text>),
Run Code Online (Sandbox Code Playgroud)
这是MVC3 btw.
有谁知道为什么会这样?它不应该存储在内存中并且有效吗?或者我是否需要明确说明我希望关联保存的内容?
谢谢
问题是你正在查询数据库中的AdSolts并在之后处理它.然后在您的视图中,您的代码尝试访问尝试再次访问数据库的AdSize,但是由于Linq-to-SQL的延迟加载特性,AdSize第一次没有加载,并且由于数据上下文被释放,它会抛出该异常.
您可以使用DataLoadOptions来解决您的问题.
List<AdSlot> list;
using(var dbc = new DbDataContext())
{
var loadOptions = new DataLoadOptions();
loadOptions.LoadWith<AdSlot>(n => n.AdSize);
dbc.LoadOptions = loadOptions;
list = dbc.AdSlots.Where(a => a.PublisherId == publisherId).ToList();
}
ViewData["AdSlots"] = list;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1695 次 |
最近记录: |