У меня есть объект на группу пользователей для управления одновременными изменениями в памяти.С фиксированной скоростью, скажем каждые шесть секунд, я беру текущее состояние изменений и применяю его к базе данных.Важная часть состоит в том, что существует отдельный поток, который требует экземпляра dbcontext, который находится за пределами ASP.NET Core MVC LifeCycle.Это затрудняет, или я не знаю, как я могу воспользоваться уколом непристойности.
Есть ли способ воспользоваться преимуществами AddDbContextPool в этом проблемном пространстве.Кажется, что нет способа напрямую арендовать AppDbContext, и Microsoft предостерегает против создания AppDbContext напрямую, поскольку его API может измениться.Насколько я знаю, у меня нет способа внедрить / сдать контекст моей базы данных в поток, который выполняет работу.
Я передаю поток, используя Reactive API, где я создаю тему и использую линию конвейера образца, как показано в примере ниже:
UpdateSubject
.Sample(TimeSpan.FromSeconds(6))
.Subscribe(x => {
// This is where I'd like to take
// advantage of the dbcontext pooling
using(AppDbContext db = new AppDbContext){
// ...
// Iterate Over Changes
// ...
db.SaveChanges();
}
});
Мои текущие допустимые параметры:
- Ничего не делать: архитектура уже объединяет вызовы.
- Реализуйте свой собственный пул и исследуйте, как самому сбросить контекст для каждого использования,
- Использовать / реализовать внутренний класс MicrosoftDbContextPool сам, несмотря на предупреждения, он строго предназначен для внутреннего использования, и API может измениться
- Откройте для себя способ отделить его от жизненного цикла ASP.NET Core MVC без изменения способа его функционирования, IE, найдите способВоспользуйтесь преимуществом внедрения зависимостей в моем случае использования.
- * открыт для предложений