2011-05-27 75 views
2

我有一個DAL基類,它集中了我的應用程序中的所有數據庫調用代碼。我希望確保所有插入/更新/刪除操作都被包裝在一個事務中,而不管它是否寫入到SP中。將我的'ExecuteNonQuery'DAL方法包裝在TransactionScope中是否會是一個好習慣,還是我會爲不需要它的db調用添加大量開銷。是否總是在DAL基類中使用TransactionScope是一種好的做法?

我很高興在需要包裝多個服務調用時使用TransactionScope在UI中進一步提升,它實際上只是在SP級別實施,我不確定。

即時通訊使用.net 3.5和大多數SQLServer 2008,一些客戶端仍然使用2005年 - 希望很快移動這些。

感謝

回答

4

Tsansactions(並且特別重的權重像TransactionScope,甚至與LTM)將多個操作,其可以跨越多於一個的DB調用時主要踢英寸

添加事務可能很重要,但它會改變查詢的性質;你可以引入最明顯的死鎖,但是你也可以改變一個故障方法的副作用。它也可能修復否則意外副作用。它會更改鎖定配置文件,並且它具有不同的系統要求(啓用DTC最明顯)。

所以不要閒置添加它們。

同樣,大量的只讀視圖屏幕不需要需要任何特殊的鎖定;哎呀,如果你看到正在進行的處理中有幻像/髒/非重複/ etc數據,大多數列表/搜索/等都不會在重要的方式中發生變化。個人而言,當我使用基於SP的代碼時,我並不傾向於將事務管理置於SP中 - 通常,更容易使用以將其提升到更高級別複雜的故障管理 - 即幾乎除TSQL之外的任何東西,這不是打算擅長於像這樣的程序性管道代碼。很明顯,它在基於集合的DML方面很好。

+0

所以你說我的.NET DAL方法包裹在交易中,但不包括它在我的基類方法?請注意,我只是打算將它添加到目前僅用於更新/刪除的ExecuteNonQuery基本方法中。在你的第一個聲明中,你推斷一個事務(例如)不會在單個SP刪除調用中啓動,SP可能會運行多個刪除/更新語句? – 2011-05-31 08:04:24

+0

@Joel - 我在說*一般*您希望交易跨越多個操作,但也可以:您可能根本不想要交易。我不認爲太多的鍋爐板在這裏幫助...交易需要思考。 – 2011-05-31 08:24:56

0

所有單個語句DML操作交易。在我看來,如果你想在操作中執行多個語句,比如更新主記錄和相關的子記錄,使用TransactionScope是有意義的。 我會把這個決定留給你的代碼的用戶,而不是強制使用它。 如果您再次存儲過程,程序創建者不一定要在一個事務中執行所有操作。在一個事務中包裝一切可能實際上導致日誌文件大小爆炸和併發問題。

問候

彼得

相關問題