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();
 }