C# 在应用程序启动时清理数据库

C# 在应用程序启动时清理数据库,c#,asp.net-core,entity-framework-core,signalr,c#-8.0,C#,Asp.net Core,Entity Framework Core,Signalr,C# 8.0,我采用了一种方法,将用户的signal连接映射到我的aspnet核心3.0应用程序。 我所指的方法在第节永久外部存储中概述。我知道这篇文章是为不同版本的Asp.Net编写的,但它很方便 这是中心的代码: 公共类SomeHub:Hub { 私有只读用户管理器_UserManager; 私有只读AppDbContextu dbContext; 受保护的BaseHub(UserManager UserManager,AppDbContext dbContext) { _userManager=user

我采用了一种方法,将用户的
signal
连接映射到我的
aspnet核心3.0
应用程序。 我所指的方法在第节
永久外部存储
中概述。我知道这篇文章是为不同版本的Asp.Net编写的,但它很方便

这是中心的代码:

公共类SomeHub:Hub
{
私有只读用户管理器_UserManager;
私有只读AppDbContextu dbContext;
受保护的BaseHub(UserManager UserManager,AppDbContext dbContext)
{
_userManager=userManager;
_dbContext=dbContext;
}
公共覆盖异步任务OnConnectedAsync()
{
var user=await_userManager.GetMe();
添加(新连接{ConnectionId=Context.ConnectionId});
wait_dbContext.saveChangesSync();
等待base.OnConnectedAsync();
}
公共覆盖异步任务OnDisconnectedAsync(异常示例)
{
var user=await_userManager.GetMe();
if(wait_dbContext.Connections.FindAsync(Context.ConnectionId)是{}连接)
{
user.Connections.Remove(连接);
wait_dbContext.saveChangesSync();
}
等待基。OnDisconnectedAsync(ex);
}
}
问题: 如果我卸下应用程序,
Connection
数据库条目将保留在我的数据库中,因为未调用
OnDisconnectedAsync
方法


应用程序启动后是否可以删除这些条目?

调用
AddDbContext
后,我需要在
Startup
类的
Configure
方法中添加以下代码:

public void配置服务(IServiceCollection服务)
{
services.AddDbContext([…]);
使用(var serviceProvider=services.BuildServiceProvider())
使用(var serviceScope=serviceProvider.CreateScope())
使用(var context=scope.ServiceProvider.GetService())
{
context.Connections.RemoveRange(context.Connections);
SaveChanges();
}
[...]
}

该文档适用于旧的ASP.NET信号器,而不是ASP.NET核心信号器。文章顶部的彩色面板中有一条非常强烈的警告:“本文档不适用于最新版本的SignalR。查看ASP.NET核心信号器。这是正确的,请查看问题的更新版本。不过,似乎没有与最新版本相匹配的文章。至少我没有找到。如果你不想要持久连接,为什么要使用数据库?除非您要部署到场?@PanagiotisKanavos With Signal,否则单个物理用户可以使用多个设备、选项卡和浏览器连接到同一个集线器。此外,存储的连接还可以帮助我在请求时向信号器组添加和删除用户。