我有一个应该等待数据库更改的 Windows 服务。
它查看的数据库表如下所示:
编号 [指南]
名称[文字]
MatchId [Guid] => 这是一个外键
比赛日期时间 [日期时间]
我希望我的服务能够检测到何时有人“清除”了“MatchId”字段(为其分配了 NULL),
然后对于在其“MatchId”字段中具有“NULL”的所有行 - 执行一些算法,为它们找到匹配项并分配“MatchId”字段。
问题是 - 如果我使用“SqlDependency”类,并等待它在“MatchId”字段上触发 - 我只会在新行受到影响时收到通知,但任何现有的“MatchId = NULL”行 - 我不会知道关于。
这意味着如果 Windows 服务加载,并且表中已经有 20 行“MatchId = NULL”,并且在接下来的 5 小时内没有人会“清除”“MatchId”行 - 这意味着我不会知道关于现有的 20 行,不会处理它们。
一种解决方案可能是在我设置“SqlDependency”之前 - 我应该执行快速“选择”以查看是否存在任何现有的“MatchId = NULL”行,如果有的话 - 处理它们,然后才设置依赖关系。
问题是 - 在完成处理这些行和设置 SqlDependency 之间的短暂间隔内 - 可能会发生一个事件,其中有人将行更改为“MatchId = NULL”,然后再一次 - 我不会在Sql依赖。
知道如何解决这个问题吗?
(如果最坏的情况发生,我就不会使用SqlDependency,我只需要每XXX分钟轮询一次数据库......)