无法访问已处置的对象

Vee*_*ech 0 c# linq-to-sql

你能帮我解决这个错误吗?
Cannot access a disposed object. Object name: 'DataContext accessed after Dispose.'.

在我的GUI中

 private void InitializePage()
    {
        cbCategory.DataSource = stock.StockCategory.Get();

    }
Run Code Online (Sandbox Code Playgroud)

在Datamodel

 public IEnumerable<StockCategory> Get()
    {
        using (leDataContext db = new leDataContext())
        {
            try
            {
                var r = from s in db.StockCategories
                        select s;
                return r;
            }
            catch (Exception ex)
            {
                Logger.Error(typeof(StockCategory), ex.ToString());
                throw;
            }

        }

    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 12

你正在处理DataContext但仍然依赖它的东西.

选项:

  • 不要丢弃DataContext.我知道这听起来很奇怪,但LINQ to SQL团队的指导(以及Matt Warren)表明,在大多数情况下(即如果你没有做任何不寻常的事情),不需要处理
  • 调用ToList() 内部Get()方法的using块.

请注意,使用仅具有退化查询的查询表达式是相当没有意义的.(如果这在你自己的代码中,即使隐含Select(s => s)也不会有用.)

我建议你改变你的方法:

public IList<StockCategory> GetAllStockCategories()
{
    using (leDataContext db = new leDataContext())
    {
        return db.StockCategories.ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)