проблемы с контекстами данных и утилизацией - PullRequest
0 голосов
/ 16 ноября 2010

У меня есть код 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 ]

1 голос
/ 16 ноября 2010

Вы утилизируете контекст данных.

Во-первых, способ использования контекста данных верен, заключая его в using.

Этоозначает, что где-то внутри Foo.bar вы избавляетесь от контекста данных;другой альтернативы нет.

Это означает, что вы должны искать в своем коде одну из следующих конструкций:

  • db.Dispose(); или

  • using (db) { ... }.

Попробуйте выполнить «Найти все» в Visual Studio для слова «Утилизация» или «использование» и вручную проверьте все экземпляры.

0 голосов
/ 16 ноября 2010

Я подозреваю, что вы используете DataContext в Foo.bar(db);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...