C# 关于处理DataContext和DataBind()
因此,如果我有一些方法返回产品列表:C# 关于处理DataContext和DataBind(),c#,.net,linq,linq-to-sql,idisposable,C#,.net,Linq,Linq To Sql,Idisposable,因此,如果我有一些方法返回产品列表: public IEnumerable<Product> List() { try { using (MyDataContext db = new MyDataContext ()) { return db.Products.ToList(); } } catch (
public IEnumerable<Product> List()
{
try
{
using (MyDataContext db = new MyDataContext ())
{
return db.Products.ToList();
}
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}
}
我在DataBind()
上得到一个错误,说我无法访问已释放的对象(MyDataContext)
是这样吗?即使我使用
.ToList()
?返回all,如果您由于绑定而引用了任何产品实体的导航属性(相关父实体或子实体),那么即使使用ToList,您也会得到该异常。这是因为访问导航属性需要在访问属性时对数据库进行额外的查询。如果DataContext已被释放,则这将不起作用
您可以通过在检索产品数据时立即加载相关数据来避免这种情况。这是通过预取机制DataContext.LoadOptions完成的,使用LoadWith选项
如果由于绑定而引用任何产品实体的导航属性(相关父实体或子实体),则即使使用ToList,您也会得到该异常。这是因为访问导航属性需要在访问属性时对数据库进行额外的查询。如果DataContext已被释放,则这将不起作用 您可以通过在检索产品数据时立即加载相关数据来避免这种情况。这是通过预取机制DataContext.LoadOptions完成的,使用LoadWith选项
您的试捕目的是什么?它只是“吞下”你的例外。我想知道您是否遇到了某种类型的SQL问题,这很可能需要您查看内部异常。您的try-catch的目的是什么?它只是“吞下”你的例外。我想知道您是否遇到了某种类型的SQL问题,这很可能需要您查看内部异常。
protected void LoadList()
{
BusProducts products = new BusProducts();
rptProducts.DataSource = products.List();
rptProducts.DataBind();
}