Я, вероятно, не думаю в правильном направлении. Я довольно новичок в Injection Dependency и ASP.Net Core.DbContext для фоновых задач через инъекцию зависимостей
У меня есть основной веб-сайт ASP.Net, и одной из задач является импорт данных с листа excel в базу данных, которую пользователь будет загружать. Листы Excel могут быть огромными, а задачи преобразования данных - это время, поэтому я хочу выполнить их в фоновом режиме. то есть пользователь загрузит лист, ответ будет отправлен немедленно, а фоновое задание/поток будет импортировать данные.
Я пытаюсь запустить фоновое задание на:
Task.Run(() => ProcessImport(model));
Проблема я бегу в том, что метод импорта обработки вызовов служб, которые имеют классы хранилища с доступом к AppDbContext через ASP.Net Dependency Injection Container, который добавляется как область с областью действия, и как только ответ отправляется обратно, контекст удаляется. Я получаю исключение во время выполнения, которое вы не можете использовать контекст после его расположения.
Мой вопрос: что является лучшим способом справиться с этой ситуацией? Должен ли я сделать одноэлементное приложение AppDbContext? Должен ли я создать новый экземпляр AppDbContext в методе ProcessImport и передать его? Я читал, что DbContext не является потокобезопасным, так что это хороший подход?
Nope: https://stackoverflow.com/questions/3266295/net-entity-framework-and-transactions/3266481#3266481 – Steven
Вы правы, но как бороться с запущенными задачами в другом потоке, которым нужен доступ к DbContext? –
В любом случае это опасный шаблон. Вы не должны использовать приложение ASP.Net для выполнения длительных задач пожарной безопасности и забывания (http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx). Если вы все сделаете правильно, задача выполняется в собственном процессе, и все проблемы с ИС исчезли. –