我正在执行一项任务,以监视和记录我们的多层 .NET 4 WPF、WCF、SQL 2008 应用程序中的各种“系统级消息”。通过消息,我的意思是有关我们应用程序中发生的事件的详细信息,例如用户登录和注销或保存数据。通过记录,我的意思是将消息插入到轻量级 SQL 表中,客户端可以从中轮询并显示最新消息。
这些消息的来源可能来自我们应用程序中的几个不同组件,例如 Windows 服务、IIS 中的 WCF 主机,甚至数据库中的存储过程。最终,这些组件以各自的方式修改 SQL 表。因此,与其单独攻击这些组件中的每一个,我想我可以通过说当 SQL 中的某些表被修改(更新、插入)时需要“触发”消息来简化事情。
首先想到的是每个表上的触发器,它监视更改并将记录插入到轻量级消息表中。我一直(99% 的时间)认为数据库触发器是坏消息(数据库触发器是邪恶的吗?)。我个人更愿意开发和调试 C# 而不是 SQL 触发器。
因此,在寻找替代方案时,我遇到了Using SqlDependency to Monitor Database Changes,其中讨论了使用 SqlDependency 类来检测更改。快速的概念证明似乎有效;但是,在查看了几个代码示例之后,似乎每次检测到更改时,都必须重新初始化新的 SqlConnection、SqlCommand 和 SqlDependency 对象,并且我可能需要 3 或 4 个需要监控的查询。
在 C# 中检测 SQL 表的更改是否有更好的选择?
此外,除了触发偏差之外,这似乎是一种迂回的方式来简单地监控一组表中的变化,只是为了将数据重新插入另一个表。还有一些其他的逻辑需要发生,我宁愿在 C# 中实现,但我应该只编写触发器来执行此操作并完成它吗?
想法?