Получение исключения «Невозможно получить доступ к удаленному объекту». при выполнении второй операции на той же странице MVC - PullRequest
0 голосов
/ 31 октября 2018

У меня есть приложение MVC 5, которое использует какую-то часть EF Core для доступа к базе данных. Я использую шаблон SimpleInjector и Repository.

Я зарегистрировал свой MainContext как

container.Register(() => new MainContext(), Lifestyle.Scoped);
container.Register<IARSMLayer,ARSMLayer>(Lifestyle.Scoped);

Итак, из документации я ожидаю, что SI отвечает за жизнь MainContext.

Внутри моего кода я инициализирую его как

     public ARSMLayer(IARSMLayerRepository arsmLayerRepository, IALayerOld aLayer, MainContext mainContext, ILog log)
    {
        this.aLayer = aLayer;
        this.mainContext = mainContext;
        this.log = log;
    }

и после загрузки данных я нажимаю кнопку, которая использует MainContext для выполнения операций.

Если я повторно нажму кнопку во второй раз, я получу следующее исключение

System.ObjectDisposedException: 'Невозможно получить доступ к удаленному объекту. Обычный Причиной этой ошибки является удаление контекста, который был разрешен путем внедрения зависимости, а затем попытка использовать тот же экземпляр контекста в другом месте вашего приложения. Это может произойти, если вы вызываете Dispose () для контекста или заключаете контекст в оператор using. Если вы используете внедрение зависимостей, вы должны позволить контейнеру внедрения зависимостей избавиться от экземпляров контекста. Имя объекта: 'MainContext'. '

Теперь я проверил, и когда я нажал на кнопку, у меня появился другой объект MainContext, поэтому я не понимаю, почему он говорит, что имеет доступ к удаленному объекту

КСТАТИ не должно было быть "безопасным", поскольку он зарегистрирован как область действия?

Здесь выдается исключение

  public int GetAxParentela(int idParentela)
    {

        var recordParentela = mainContext.GradoParentela.Where(m => m.IdGradoParentela == idParentela).Single(); //HERE

        return recordParentela.IdAx.HasValue ? recordParentela.IdAx.Value : -1;

    }
...