数据上下文和处理的问题

时间:2010-11-16 00:14:26

标签: c# linq linq-to-sql

我有一些看起来像

的C#代码
using (DataContext db = new DataContext(Program.config.dbContextStr)) {
    Foo.bar(db);
}

因此bar是类Foo的静态方法,bar使用传入的db对象。它还将db对象传递给它调用的其他一些方法。

问题是我遇到了这个例外:

System.ObjectDisposedException: Cannot access a disposed object. 
Object name: 'DataContext accessed after Dispose.'.

我一直在寻找解决方案,人们建议忘记using声明并简单地写一下:

DataContext db = new DataContext(blah);
Foo.bar(db); 
// Let the garbage collector go about its merry business.

并禁用延迟加载:

db.DeferredLoadingEnabled = false;
Foo.bar(db);

我已经尝试了这两种解决方案,但我仍然得到了例外。还有其他我应该尝试的事情吗?

2 个答案:

答案 0 :(得分:1)

您正在处置数据上下文。

首先,您使用数据上下文的方式是正确的,将其包装在using中。

这意味着在Foo.bar内的某个地方,您正在处理您的数据上下文;没有其他选择。

这意味着您必须在代码中搜索以下任一构造:

  • db.Dispose();

  • using (db) { ... }

尝试在Visual Studio中对“Dispose”或“using”一词执行“全部查找”并手动检查所有实例。

答案 1 :(得分:0)

我怀疑您正在Foo.bar(db);

中处理DataContext