2016-11-23 2 views
0

На моем сайте ASP.NET Core MVC у меня есть концентратор SignalR, у которого есть мой DbContext, введенный в конструктор. Концентратор извлекает данные из базы данных и отправляет их в сетку kendo ui для просмотра пользователем. Эти данные фильтруются в этом концентраторе, на котором выбрана группа (хранится в базе данных).Зависимость впрыска DbContext в концентраторе SignalR не извлекает последние данные

Выбор группы осуществляется вне контекста концентратора. Когда я изменяю выбранную группу пользователей, страница перезагружается, чтобы обновлять различные элементы пользовательского интерфейса. Когда вызывается вызывающий концентратор signalr, выбранная группа по-прежнему устанавливается как то, что было до изменения. После копания немного я наткнулся на this issue on the signalr github. Я понимаю, потому что хаб преходящ, DbContext также, и так как концентратор длинный, DbContext никогда не обновляется.

Есть ли простой способ обойти это, пока все еще зависит от впрыскивания DbContext или мне нужно создать и установить новый контекст для каждого вызова? Если да, то каков наилучший способ сделать это и все еще передать строку соединения из appsettings.json?

EDIT

настоящее время я использую Microsoft.AspNetCore.SignalR.Server и не новый Microsoft.AspNetCore.SignalR библиотеки.

ответ

1

Единственный способ, которым я мог бы обойти эту проблему с Microsoft.AspNetCore.SignalR.Server было добавить DbContextOptionsBuilder<T> одноплодной к методу ConfigureServices в Startup.cs, а затем вызвать, что в using(...) в ступице. Хотя я чувствую, что это грязный путь вокруг проблемы, я также считаю, что это единственный путь вокруг проблемы. Microsoft недавно устарела SignalR-Server и переместилась на новую базу кода на SignalR. Надеемся, что эта проблема будет рассмотрена в их новой версии.

Startup.cs

DbContextOptionsBuilder<PortalDbContext> builder = new DbContextOptionsBuilder<PortalDbContext>(); 
builder.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")); 
services.AddSingleton(builder.Options); 

хаб Классы

using (PortalDbContext dbContext = new PortalDbContext(_dbContextOptions)) 
{ 
    ... 
}