Я адаптировал подход отображения signalr
подключений к пользователям для моего aspnet core 3.0
приложения. Подход, о котором я говорю, описан в Отображение пользователей SignalR на соединения , раздел Permanent, external storage
. Я знаю, что эта статья была написана для другой версии Asp.Net, но она пригодилась.
Это код хаба:
public class SomeHub : Hub
{
private readonly UserManager _userManager;
private readonly AppDbContext _dbContext;
protected BaseHub(UserManager userManager, AppDbContext dbContext)
{
_userManager = userManager;
_dbContext = dbContext;
}
public override async Task OnConnectedAsync()
{
var user = await _userManager.GetMe();
user.Connections.Add(new Connection { ConnectionId = Context.ConnectionId });
await _dbContext.SaveChangesAsync();
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception ex)
{
var user = await _userManager.GetMe();
if (await _dbContext.Connections.FindAsync(Context.ConnectionId) is {} connection)
{
user.Connections.Remove(connection);
await _dbContext.SaveChangesAsync();
}
await base.OnDisconnectedAsync(ex);
}
}
Вопрос
Если я закрою приложение, записи в базе данных Connection
останутся в моей базе данных, поскольку метод OnDisconnectedAsync
не был вызван.
Можно ли удалить эти записи после запуска приложения?