2011-03-07 55 views
0

我最近拿起SubSonic在一個新的vb.net窗口應用程序項目中使用,到目前爲止我真的很喜歡它!它是一個完美的開始,並使用t4模板以某種方式編寫,這使得它可以自定義。亞音速是否可以/本來可以處理數據庫衝突?

無論如何,我正在使用Active記錄和MySql。我有一個表單,其控件使用綁定源綁定到亞音速數據類。 當我:

  1. 使形式有些變化,但

  2. 也使用MySQL工作臺更改數據庫表中的數據,然後

  3. 通過表單保存更改

我沒有收到數據衝突的警告/通知? 通過在亞音速數據類上調用Save()覆蓋工作臺更改

這可能不是亞音速的一個功能,或者我做錯了什麼? 如果沒有,我會添加到模板保存代碼,這樣我:

  1. 加載一個新的副本記錄

  2. 現有記錄的時間戳比較新鮮記錄的時間戳

  3. 比較每個字段的數據並構建一系列變化

  4. 引發一個事件,使用eventargs中的更改集合,以便我可以讓用戶決定是否要d O操作。

我不想這樣做,如果它已經完成,那就是一切。

回答

0

我沒有收到數據衝突的警告/通知 ?工作臺變化 可以通過調用 保存()亞音速數據類

這可能不會是亞音速 功能又或者我在做財產以後不對改寫?

在SubSonic中沒有樂觀的併發功能。此外,它還不是「尚未」,它是「時期」 - SubSonic項目沒有發生重大的發展,並且圍繞着支持Oracle(一個長期未實現的目標)開展的是什麼開發。

如果沒有,我會加入到節約代碼 模板

我會認爲這將是更高效的爲你放棄亞音速,並開始學習不同的數據訪問工具具有更強大的功能,如實體框架或NHibernate。這不可能是您與SubSonic碰到的最後一個限制。

如果沒有,我會加入到節約代碼 模板,讓我:

  1. 加載一個新的副本記錄

  2. 現有記錄的時間戳比較新鮮記錄的時間戳

  3. 比較每個字段的數據並建立一個變化集合

  4. 引發事件,與變化集合中的EventArgs的,這樣我可以讓用戶決定西隧做。

這將是不必要的低效通過加載記錄的新副本開始。更好的選擇是將時間戳添加到時間戳列的更新中,以便僅當主鍵和時間戳列匹配時纔會發生更新。您可以通過檢查受影響的記錄計數來以這種方式檢測併發衝突。如果受影響的記錄計數爲零,則記錄已被更新或刪除,然後您可以加載副本並開始衝突解決。

+0

感謝QES,對併發衝突的投入,肯定會前往這個方向努力。我還沒有準備好拋亞音速,但當我在這個網站上讀到一個問題'亞音速垂死'時,Rob給出了一個非常令人信服的答案。 – ajp 2011-03-08 13:53:46

+0

它並沒有死亡,它的確如此。它具有的功能是完全可用的。但是,對於併發或管理對象之間的關係,您不會找到太多幫助,也不會添加此類新功能。正如羅布所說,這是一個查詢工具,而不是一個ORM。 – 2011-03-08 15:34:59

相關問題