觀察員與觸發器
回答
我使用觸發器,但觸發器通常是特定於數據庫的。如果你打算支持多個數據庫服務器,當然可以找到一種方法來代碼。如果您確定您將使用特定的數據庫服務器,那麼您的數據完整性將會愛上您的觸發器。
觸發器需要非常非常少用。當一個INSERT可能導致數十個觸發器和數百行代碼級聯時,這是一個難以維護的危險情況。你決定不使用觸發器的地方越多,你就越好。 把它放在crud包 – 2008-11-21 05:24:15
因爲我們使用LINQ2SQL這個任務很容易被創建覆蓋SubmitChanges()方法。我們的主要目標是在我們的表格中進行審計。該代碼將是這樣的:
/// <summary>
/// Sends changes that were made to retrieved objects to the underlying database,
/// and specifies the action to be taken if the submission fails.
/// NOTE: Handling this event to easily perform Audit tasks whenever a table gets updated.
/// </summary>
/// <param name="failureMode">The action to be taken if the submission fails.
/// Valid arguments are as follows:<see cref="F:System.Data.Linq.ConflictMode.FailOnFirstConflict"/>
/// <see cref="F:System.Data.Linq.ConflictMode.ContinueOnConflict"/></param>
public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
{
//Updates
for (int changeCounter = 0; changeCounter < this.GetChangeSet().Updates.Count; changeCounter++)
{
object modifiedEntity = this.GetChangeSet().Updates[changeCounter];
SetAuditStamp(this, modifiedEntity, ChangeType.Update);
}
//Inserts
for (int changeCounter = 0; changeCounter < this.GetChangeSet().Inserts.Count; changeCounter++)
{
object modifiedEntity = this.GetChangeSet().Inserts[changeCounter];
SetAuditStamp(this, modifiedEntity, ChangeType.Insert);
}
base.SubmitChanges(failureMode);
我們格外不喜歡使用觸發器,因爲他們總是隱藏到您DB和它使硬制定出可能出現的問題......與具有進入你的代碼只需要開始調試它找出爲什麼有些事情失敗了,例如...
一致認爲觸發因所提及的原因而發臭。完全不同意審計最好在數據庫之外完成。如果您極其嚴格地執行訪問請求,那麼任何人都無法獲得用戶名/密碼到您的數據庫,那麼您有可能有戰鬥機會。 – 2008-11-21 05:21:41
除非您支持多個DBMS,否則您的框架在未來5年(比如說)比您選擇的DBMS更有可能發生變化。此外,未來可能有一些要求支持其他形式的輸入,例如,網頁或移動設備。將這些操作放入數據庫觸發器中意味着無論觸發它們的應用程序如何,都會執行這些操作。
- 1. 事件觀察員 - 觸發事件
- 2. 對觀察員的觀察員觀察員是否會發生任何變化?
- 3. AngularJS - 觸發$ watch/$觀察者
- 4. 觀察不會觸發
- 5. 手動觸發觀察值?
- 6. Rxjs觀察員
- 7. 布爾屬性不觸發相關的可觀察觸發器
- 8. 與Powershell文件觀察器不觸發總是
- 9. 簡單的觀察到/觀察員rxjs
- 10. KVO觀察與NSNotificationCenter觀察
- 11. 觀察員在AppDelegate的可達性不能觸發
- 12. Magento觀察員沒有被事件觸發
- 13. 觀察員可以觀察多個可觀察物嗎?
- 14. onClick vs觀察員
- 15. magento sales_order_place_after觀察員
- 16. Java RMI服務器註冊表連接觀察器觸發器
- 17. Rails觀察員沒有發射......有時
- 18. 定製觀察者未觸發
- 19. 觀察者和回調未觸發accept_nested_attributes_for
- 20. 文件觀察家事件觸發
- 21. 觸發觀察到幾個毫秒
- 22. 聚合物觀察者不會觸發
- 23. mongoid觀察員與rails-observers rails4
- 24. 與觀察員的PHP對象組成?
- 25. 問題與無擴展名觀察員
- 26. 斯卡拉監聽器/觀察員
- 27. Magento觸發觀察者與自定義orderstatus
- 28. 渲染方法不可觸發與可觀察數組更新
- 29. 如何在觸發器中觸發可觀察變量的Ajax加載?
- 30. 利用觀察員/從rxjs
說出你在答案中使用的框架可能很有意思。 – ewakened 2008-11-21 00:58:58