トランザクションのサポート
LINQ to SQL では、3 種類のトランザクション モデルがサポートされています。 チェックが行われる順に、これらのモデルを以下に示します。
明示的なローカル トランザクション
SubmitChanges が呼び出されたときに Transaction プロパティが (IDbTransaction
) トランザクションに設定されている場合、同じトランザクションのコンテキストで SubmitChanges 呼び出しが実行されます。
トランザクションの実行が終了したら、ユーザーがトランザクションをコミットまたはロールバックする必要があります。 トランザクションに対応する接続は、DataContext を構築するのに使用した接続に一致する必要があります。 異なる接続が使用されると、例外がスローされます。
明示的な分散トランザクション
LINQ to SQL API (SubmitChanges など) は、アクティブな Transaction のスコープ内で呼び出すことができます。 LINQ to SQL によって呼び出しがトランザクションのスコープ内であることが検出されて、新しいトランザクションは作成されません。 この場合、LINQ to SQL では接続の終了も回避されます。 このようなトランザクションのコンテキストで、クエリと SubmitChanges の実行が可能です。
暗黙のトランザクション
SubmitChanges を呼び出すと、LINQ to SQL によって、呼び出しが Transaction のスコープにあるかどうか、または Transaction
プロパティ (IDbTransaction
) がユーザーによって開始されたローカル トランザクションに設定されているかどうかがチェックされます。 どちらのトランザクションも見つからない場合、LINQ to SQL によってローカル トランザクション (IDbTransaction
) が開始され、それを使用して、生成された SQL コマンドが実行されます。 すべての SQL コマンドが終了すると、ローカル トランザクションがコミットされて LINQ to SQL から戻ります。