错误:ASP.NET:'在Dispose之后访问DataContext。'

时间:2011-10-16 10:08:59

标签: asp.net linq linq-to-sql

有两个表: Account (id)BranchId(Id,Name,AccountId) 我在pageload中有这段代码

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
       using (var db = new SitesDataContext())
       {
           BranchGrid.DataSource = db.Branches.Where(b=>b.AccountId == loggedInUser.AccountId).ToList();
                    BranchGrid.DataBind();
       }
    }            
}

我了解Linq和延迟加载,这就是我使用ToList()的原因 但我仍然得到错误。

现在,如果我删除分支b / w分支和帐户,上面的代码工作正常。 但是它会引发协会异常。

如何在保持关联的同时解决这个问题?

由于

2 个答案:

答案 0 :(得分:3)

即使使用ToList(),您的帐户也不会被急切加载,只有分支

你可以:

  • 删除using {}并让垃圾收集器完成其工作

  • 将loadOptions添加到datacontext以急切加载带分支的帐户(类似这样)

     DataLoadOptions options = new DataLoadOptions();
     options.LoadWith<Branches>(b => b.Account);
     Context.LoadOptions = options;
    

答案 1 :(得分:0)

某处,正在访问Branch实例的Account属性。您必须找到访问该属性的代码并将其停止。