我正在處理一項任務,以在我們的多層.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