所以,如果我有一些方法可以返回产品列表:
public IEnumerable<Product> List()
{
try
{
using (MyDataContext db = new MyDataContext ())
{
return db.Products.ToList();
}
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}
}
当我设置时,让我们说Repeater
将其作为数据源:
protected void LoadList()
{
BusProducts products = new BusProducts();
rptProducts.DataSource = products.List();
rptProducts.DataBind();
}
我在DataBind()
上收到错误,说我无法访问Disposed Object(MyDataContext)..
这是对的吗?即使我使用.ToList()
返回所有内容?
答案 0 :(得分:4)
如果由于绑定而引用任何Product实体的导航属性(相关的父或子实体),那么即使使用ToList,也会得到该异常。这是因为访问导航属性将需要在访问属性时对数据库进行额外查询。如果已经处理了DataContext,那将无效。
您可以通过在检索产品数据时急切加载相关数据来避免这种情况。这是使用预取机制--DataContext.LoadOptions,使用LoadWith选项完成的。
http://msdn.microsoft.com/en-us/library/Bb882681%28v=VS.90%29.aspx