Экземпляр ObjectContext был удален - PullRequest
5 голосов
/ 16 мая 2011

Я использую платформу сущностей, как описано здесь: Платформа сущностей использует много памяти

Я понял, что мне нужно использовать выражение "using" для корректной работы.Когда я делаю:

                using (IUnitOfWork uow = UnitOfWork.Current)
                {
                    CompanyRepository rep = new CompanyRepository();
                    m_AllAccounts = rep.GetQuery().
                        Select(x => new Account(x)).ToList(); ///HERE I GET THE EXCEPTION
                }

Для этого примера я получаю:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 16 мая 2011

Возможно, я ошибаюсь, но первое, что приходит мне в голову, это то, что UnitOfWork.Current возвращает уже удаленную единицу работы.

Представьте себе следующий код:

void MethodA ()
{
    using (IUnitOfWork uow = UnitOfWork.Current)
    {
        // do some query here
    }
}

void MethodB ()
{
    using (IUnitOfWork uow = UnitOfWork.Current)
    {
        // do another query here
    }
}

MethodA (); // works OK
// now UnitOfWork.Current is disposed
MethodB ();  // raises exception

Вопрос сводится к тому, что именно UnitOfWork.Current делает и что должен делать.Должен ли он создавать новый объект каждый раз, когда к нему обращаются?Должен ли он сохранить ссылку, если он не утилизирован?Это не очевидно, и вы могли быть смущены этим.

1 голос
/ 16 мая 2011

Я думаю, ObjectContext было утилизировано до того, как вы достигли using заявления.Ваш связанный вопрос показывает, что вы храните контекст в HttpContext.Items или HashTable.Если вы обернули все вызовы в UnitOfWork.Current на using, то будет работать только первый блок - все остальные получат удаленный контекст из HttpContext или HashTable.

1 голос
/ 16 мая 2011

Ну, ошибка говорит сама за себя. После любого вашего **using** (IUnitOfWork uow = UnitOfWork.Current) ваш «глобальный» контекст удаляется. Поэтому любая попытка доступа к нему приведет к ошибке.

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