トランザクションのサポート

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 から戻ります。

関連項目