SignalR 集线器中的依赖项注入 DbContext 不会提取最新数据

Dependency injected DbContext in a SignalR hub does not pull latest data

在我的 ASP.NET 核心 MVC 站点中,我有一个 SignalR 集线器,它已将我的 DbContext 注入到构造函数中。集线器从数据库中提取数据并将其发送到 kendo ui 网格以供用户查看。此数据在选择组的那个集线器中过滤(存储在数据库中)。

组选择是在中心上下文之外完成的。当我更改用户选择的组时,页面会重新加载以更新各种 UI 元素。然后调用信号器中心时,所选组仍设置为更改之前的状态。经过一番挖掘后,我发现了 this issue on the signalr github。我的理解是因为集线器是瞬态的,DbContext 也是,并且由于集线器很长 运行,所以 DbContext 永远不会更新。

有没有一种简单的方法解决这个问题,同时仍然依赖注入 DbContext 或者我是否需要为每个调用创建和处理一个新的上下文?如果是这样,最好的方法是什么,并且仍然从 appsettings.json?

传递连接字符串

编辑

我目前正在使用 Microsoft.AspNetCore.SignalR.Server 而不是新的 Microsoft.AspNetCore.SignalR 库。

我用 Microsoft.AspNetCore.SignalR.Server 解决这个问题的唯一方法是将 DbContextOptionsBuilder<T> 单例添加到 Startup.cs 中的 ConfigureServices 方法,然后在集线器中的 using(...)。虽然我觉得这是解决问题的肮脏方法,但我也相信这是解决问题的唯一方法。 Microsoft 最近弃用了 SignalR-Server and are moving to a new code base at SignalR。希望这个问题会在他们的新版本中得到解决。

Startup.cs

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

中心 类

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