EntityFramework 和 SignalR - 将更新广播到数据库

本文关键字:广播 数据库 更新 SignalR EntityFramework | 更新日期: 2023-09-27 18:31:04

我希望有人能指出我正确的方向。我是 .NET 的新手。

我有一个数据库,我想使用 SignalR 进行监视。每当满足某些参数的新记录被推送到数据库中时,我都想将其广播给我的客户端。

我将如何做到这一点?

EntityFramework 和 SignalR - 将更新广播到数据库

SignalR这在服务器和客户端之间工作,它不是为了监视数据库而设计的,但是当服务器具有要传递给连接的客户端的信息时,它可用于调用驻留在客户端软件中的更新函数。

实体框架你可以编写一个继承自 DbContext 的 MyDatabaseContext然后,您可以覆盖所有方法,如SaveChanges,SaveChangesAsync,并添加自己的代码以创建"审核"方法,允许您捕获有关更新的代码。

public MyDatabaseContext : DbContext
{
    private readonly IAuditDatabaseChange _auditDatabaseChange;
    static CommonDatabaseContext()
    {
        Database.SetInitializer<CommonDatabaseContext>(null);
    }
    public CommonDatabaseContext() {
        _runningMigrations = true;
    }
    public CommonDatabaseContext(IAuditDatabaseChange auditService)
    {
        _auditDatabaseChangeService = auditService;
        _runningMigrations = false;
    }
    public override async Task<int> SaveChangesAsync()
    {
        if (!_runningMigrations)
        {
            await _auditDatabaseChange.SaveAudit(this);
        }
        return await base.SaveChangesAsync();
    }
    public override int SaveChanges()
    {
        if (!_runningMigrations)
        {
            Task.Run(() => _auditDatabaseChange.SaveAudit(this)).Wait();
        }
        return base.SaveChanges();
    }
}

当然,这只是如何实现它的一个想法,你必须定义所有服务,提供和配置你选择的依赖注入框架,添加上下文中所有缺失的内容,如初始化和所需的EF映射等。

它可能会为你指明正确的方向。