web-dev-qa-db-ja.com

Database.BeginTransactionとTransactions.TransactionScope

違いは何ですか System.Transactions.TransactionScopeおよびEF6のDatabase.BeginTransaction

誰かが小さな例を挙げたり、明確な違いがあるときに使用するものを説明したりできますか?

追伸:私のプロジェクトでは、EF6を使用しています。私はすでにドキュメントを読みましたが、あまり役に立ちませんでした。例も調べましたが、SqlConnection.BeginTransactionそして今、MSはこの新しいDatabase.BeginTransaction EF6で。

72
Flair

Entity Framework 6のドキュメントで答えを見つけました:

EF6の導入により、MicrosoftはDatabase.BeginTransaction()およびDatabase.UseTransaction()という新しいAPIメソッドを使用することを推奨しています。 _System.Transactions.TransactionScope_はまだ非常によくサポートされていますが、EF6のほとんどのユーザーにとってnecessaryではなくなりました。

Database.BeginTransaction()はデータベース関連の操作トランザクションにのみ使用されますが、それに加えて_System.Transactions.TransactionScope_により、「プレーンC#コード」もトランザクションに対応できます。

したがって、EF6のトランザクションでdb関連の操作のみを行う場合はDatabase.BeginTransaction()を使用します。そうでない場合は、トランザクションでdb操作とC#コードを混在させるために_System.Transactions.TransactionScope_を使用します。

それでもTransactionScopeアプローチを好む人には、特にクラウドシナリオ(クラウドシナリオは分散トランザクションをサポートしません)で、その制限をチェックアウトすることをお勧めします。

さらに詳しい情報は こちら

82
Flair