2009-04-30 54 views
5

我有一個Linq-to-SQL類,我想在將記錄保存到數據庫之前執行一些預保存驗證。另外,一旦它被保存,我想有一些保存後處理代碼。如何捕獲Linq-to-SQL類上的Save或Load事件?

同樣,當一條記錄被刪除時,我想要調用預處理和後處理的方法,無論從何處調用context.SubmitChanges()

我在生成的代碼中看不到任何可以覆蓋的方法。部分方法OnValidate()可能足以進行預處理,但是我希望能夠取消保存,如果某些條件未得到滿足,並且我沒有看到任何掛鉤進行後處理。

我錯過了什麼嗎?或者你能推薦另一種達到預期效果的方式嗎?

謝謝!

回答

7

對於插入:

  1. 您的實體創建一個基類。

  2. 添加一些虛擬方法。

  3. 覆蓋DataContext.SubmitChanges

  4. 調用DataContext.GetChangeSet()並迭代應用您先前定義的函數的插入。

要恢復更改,請看我的extension method

+0

謝謝 - 沒有意識到SubmitChanges是虛擬的!在你和Marc Gravell之間獲得答案信用是一個艱難的通話,但是我會通過指向恢復更改的擴展方法的鏈接提供給你。而且還因爲啊,我喜歡這些東西。 Baie dankie,boet! ;) – 2009-04-30 11:10:58

4

那麼,拋出一個異常將有效地取消改變......雖然也許有點苛刻。

另一個擴展點是覆蓋數據上下文中的SubmitChanges,以獲取待執行的更改(GetChangeSet),執行任何最終更改(可能爲審計),然後調用base.SubmitChanges。您可以在之後(使用您在保存之前獲得的變更集)在之後進行任何保存後操作。