厳格なルールはありませんが、ビジネス層からトランザクションを制御する理由がいくつかあります:
- <リ>
データ ストアの境界を越えた通信。トランザクションは RDBMS に対して行う必要はありません。彼らはさまざまなエンティティに反対する可能性があります.
<リ>呼び出している特定のストアド プロシージャでは利用できない可能性があるビジネス ロジックに基づいて、トランザクションをロールバック/コミットする機能。
<リ>単一のトランザクション内で任意の一連のクエリを呼び出す機能。これにより、トランザクション数を気にする必要もなくなります。
<リ>
個人的な好み:c# には、トランザクションを宣言するためのより洗練された構造があります:using
ブロック。比較すると、ロールバック/コミットにジャンプするときに、ストアド プロシージャ内のトランザクションが面倒であることが常にわかりました。
これは、開かれているトランザクションの数によって問題になる場合とそうでない場合があります (これが単一のジョブなのか、高い並行性で実行されるプロシージャなのかは明らかではありません)。オブジェクトに適用されているロックと、それらのロックが保持されている期間を確認することをお勧めします。
検証はおそらくすべきことを心に留めておいてください ロック;データを検証してからアクションが発生するまでの間にデータが変更された場合はどうなりますか?
ある場合 問題がある場合は、問題のプロシージャを 2 つのプロシージャに分割し、TransactionScope
の外から 1 つを呼び出すことができます。 .