我現在寫,這將需要多個插入,更新和刪除我的業務實體的應用程序。我正在使用TransactionScope類來保證所有的存儲過程都可以提交或回滾爲單個工作單元。.NET TransactionScope類和T-SQL TRAN提交和回滾
我的問題是,我必須也使用COMMIT TRAN和ROLLBACK TRAN是我的每一個存儲過程,如果我用我的.NET類庫TransactionScope類?
我現在寫,這將需要多個插入,更新和刪除我的業務實體的應用程序。我正在使用TransactionScope類來保證所有的存儲過程都可以提交或回滾爲單個工作單元。.NET TransactionScope類和T-SQL TRAN提交和回滾
我的問題是,我必須也使用COMMIT TRAN和ROLLBACK TRAN是我的每一個存儲過程,如果我用我的.NET類庫TransactionScope類?
您不應該需要 - 它應該在TransactionScope中處理。它確實取決於你正在做什麼以及你如何處理交易(顯式或隱式)更多HERE
我只處理顯式事務。 – 2008-10-09 23:28:34
不,如果使用的TransactionScope網上交易不需要明確的交易一些性能問題 - 但是:重要您應該在連接字符串中設置Transaction Binding=Explicit Unbind;
。完整的詳細信息是here,但除此之外,最後幾個操作可以回滾,最後幾個提交(或者說,在任何事務之外運行)。
如果您在TransactionScope
或CommittableTransaction
入伍那麼我強烈建議你做不使用begin transaction
或SqlConnection.BeginTransaction
明確地創建自己的本地事務。
TransactionScope
/CommittableTransaction
是一個不同的「家庭」,並從begin transaction
/SqlTransaction
相互排斥的,所以我會賽義夫汗不同意。的確,System.Transactions在Sql 2000上有性能問題,所以最好使用SqlTransaction或begin transaction
。但是,如果你這樣做,那麼你不應該使用TransactionScope/CommittableTransaction。
順便說一句,那馬克Gravell描述的行爲已經在.NET 4.0中改變。即使你不使用Explicit Unbind,也不可能讓一些命令回滾並且有一些提交。 (但是他是正確的,在舊版本中你應該使用Explicit Unbind)。
我正在使用SQL Server 2005.感謝您的信息 – 2008-10-09 23:58:14