首页 > 解决方案 > 如何允许 SignalR 使用 EF6 将更新从 DB 推送到浏览器

问题描述

如何允许SignalR使用 Entity Framework 6 将更新从 SQL Server 数据库推送到浏览器?

这是我的操作方法:

public ActionResult Index()
{
    var currentGates = _ctx.Transactions
        .GroupBy(item => item.SubGateId)
        .SelectMany(group => group.OrderByDescending(x => x.TransactionDateTime)
        .Take(1))
        .Include(g => g.Card)
        .Include(g => g.Student)
        .Include(g => g.Student.Faculty)
        .Include(g => g.Student.Department)
        .Include(g => g.SubGate)
        .ToList();

    return View(currentGates);
}

经过大量搜索,我得到的唯一结果是:

ASP.NET MVC 5 SignalR、SqlDependency 和 EntityFramework 6

我已经尝试了建议的方法,但没有奏效。除此之外,我发现了一个非常重要的安全问题,即在隐藏字段中存储敏感数据!

我的问题是:如何根据Insert事务表上的任何内容更新我的视图?

标签: c#asp.netasp.net-mvcentity-framework-6signalr

解决方案


所以基本上你需要做的是覆盖SaveChanges()你的 SignalR 函数的方法和操作:

public class ApplicationDbContext : IdentityDbContext<IdentityUser>
  {
  public override int SaveChanges()
        {
            var entities = ChangeTracker.Entries().Where(x => x.Entity is Transactions && x.State == EntityState.Added) ;
            IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
            foreach (var entity in entities)
            {
              hubContext.Clients.All.notifyClients(entity);
            }

            return base.SaveChanges();
         }
    }

推荐阅读