我正在处理一项任务,以在我们的多层.NET 4 WPF,WCF,SQL 2008应用程序中监视和记录各种“系统级消息”。关于在我们的应用程序中发生的事件,例如用户登录和注销或数据被保存。通过日志记录,我的意思是我们将把消息插入轻量级SQL表中,客户端可以从中查询和显示最新消息。监视SQL数据库表更改的设计注意事项
这些消息的来源可能来自我们的应用程序中的几个不同的组件,例如Windows服务,IIS中的WCF主机,甚至是数据库中的存储过程,最终这些组件会以各自的方式修改SQL表。独立攻击每个组件我想我可以通过说当SQL中的某些表被修改(更新,插入)时需要“触发”消息来简化这些事情。
首先想到的是每个表上的触发器,这些表监视更改并将记录插入轻量级消息表中。我一直(99%的时间)一直认为数据库触发器是坏消息(Are database triggers evil?)。我个人更愿意开发和调试C#而不是SQL触发器。
因此,在追求替代品时,我遇到过使用SqlDependency类来检测更改的Using SqlDependency to Monitor Database Changes。一个概念的快速证明似乎有效;但是,在查看几个代码示例之后,它看起来像检测到每个更改,新的SqlConnection,SqlCommand和SqlDependency对象将不得不重新初始化,我可能需要3或4个需要监视的查询。
有没有更好的选择来检测C#中的SQL表的变化?另外,抛开触发偏见,这看起来像是一种简单的方式来简单地监视一组表中的更改,以便将数据重新插入另一个表中。还有其他一些逻辑需要发生,我宁愿在C#中实现,但是我应该写触发器来做到这一点并完成它?
想法?
感谢您的快速响应!也许你是对的。当然,在这种情况下(基于我的研究),我认为触发器会非常简单。 – 2012-04-25 17:58:27