Исключение: экземпляр ObjectContext был удален и больше не может использоваться для операций, требующих подключения.С отключенным LazyLoading - PullRequest
0 голосов
/ 07 февраля 2019

Иногда я получаю следующее исключение: «Экземпляр ObjectContext был удален и больше не может использоваться для операций, требующих подключения».

Воспроизведение этого исключения нестабильно и его очень трудно поймать.

Обычно я получаю это исключение, когда браузер отправляет два или более запросов одновременно.

Был использован интеграционный тест, запускающий сотни потоков одновременно с уникальными экземплярами DbContext и последующим выполнениеммодельные методы.Тем не менее, этот тест не выдал ни одного исключения и прошел.

Исключение выдается при первом запросе к Db:

public IForumCategory GetCategoryById(int id)
{
    return Repository.ForumCategories.FirstOrDefault(a => a.Id == id);
}

LazyLoading отключен, и свойства навигации не используются.«Включения» также не используются и заменяются «объединениями».

Удаление DbContext:

public abstract class WebApiDependencyScope<TModelFactory> : IDependencyScope where TModelFactory : ModelFactory
{
    ...

    public virtual void Dispose()
    {
        ModelFactory.Dispose();
    }

    ...
}

Затем DbContext удаляется ModelFactory, поэтому его нельзя рассматривать как ранний DbContext.распоряжение

Обновленная информация: DbContext, созданный для запроса AspNet WebApi Framework:

public override IDependencyScope BeginScope()       
{           
    ISiteRepositoryFactory repositoryFactory = new SiteAspNetRepositoryFactory(Config);
    GameModelFactory factory = new GameModelFactory(
     repositoryFactory, LocaleProvider, Config, Authenticate);

    Scope = new GameWebApiDependencyScope(factory);
    return Scope;
}

1 Ответ

0 голосов
/ 07 февраля 2019

Решение

Я не могу понять это до конца, но возможно ...

Что происходит: Каждый раз, когда я создаю дочернюю область и назначаю ее длякорневая область.Но каждый дочерний объем избавляется, когда запрос заканчивается.Таким образом, корневая область на данный момент может иметь область действия, и когда она пытается создать службу из этой области, у меня есть это исключение.

Как и почему корневая область вызывает это конкретное исключение, я понятия не имею.

Теперь BeginScope выглядит:

public override IDependencyScope BeginScope()       
{           
    ISiteRepositoryFactory repositoryFactory = new SiteAspNetRepositoryFactory(Config);
    GameModelFactory factory = new GameModelFactory(
     repositoryFactory, LocaleProvider, Config, Authenticate);

    return new GameWebApiDependencyScope(factory);
}

И область Root инициализируется в конструкторе Resolver.Возможно, я исправил проблему, но это не совсем так, поскольку исключение нестабильно.

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