Database.BeginTransactionとTransactions.TransactionScope


87

System.Transactions.TransactionScopeとEF6の違いは何Database.BeginTransactionですか?

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

PS:私のプロジェクトでは、EF6を使用しています。私はすでにドキュメントを読みましたが、あまり役に立ちませんでした。例も調べましたが、どちらかSqlConnection.BeginTransactionと言えば使用されており、MSはこれDatabase.BeginTransactionをEF6に導入しました。

回答:


97

Entity Framework6のドキュメントで答えを見つけました。

EF6の導入に伴い、Microsoftは新しいAPIメソッドを使用することをお勧めします:Database.BeginTransaction()およびDatabase.UseTransaction()。が、System.Transactions.TransactionScopeまだ非常によくサポートされ、それはもはやありません必要なEF6のほとんどのユーザーのために。

一方でDatabase.BeginTransaction()唯一のデータベース関連業務トランザクションのために使用され、System.Transactions.TransactionScopeそのほかに、それはプレーンなC#コード」の可能性も取引することができます。

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

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

詳細については、こちらをご覧ください


11
残念ながら、Database.BeginTransactionを使用してトランザクションをネストすることはできませんが、TransactionScopeを使用してネストすることはできます。
Triynko 2018年

8
「プレーンなC#コード」もトランザクションであるとはどういう意味ですか?
ジェラルド・

@Gerard EFの外部でSQL操作(ADO.NETの使用など)を実行すると、それらの操作も同じトランザクションで発生することを意味すると思います。
Rudey
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.