LINQ to SQL では、3 つの異なるトランザクション モデルがサポートされています。 次に、これらのモデルを実行されたチェックの順序で示します。
明示的なローカル トランザクション
SubmitChangesが呼び出されると、Transaction プロパティが (IDbTransaction
) トランザクションに設定されている場合、SubmitChanges呼び出しは同じトランザクションのコンテキストで実行されます。
トランザクションが正常に実行された後は、トランザクションをコミットまたはロールバックする必要があります。 トランザクションに対応する接続は、 DataContextの構築に使用される接続と一致する必要があります。 別の接続が使用されている場合、例外が発生します。
明示的な再頒布可能トランザクション
アクティブなSubmitChangesのスコープ内で LINQ to SQL API (Transactionを含むがこれらに限定されない) を呼び出すことができます。 LINQ to SQL は、呼び出しがトランザクションのスコープ内にあり、新しいトランザクションを作成しないことを検出します。 この場合、LINQ to SQL は接続を閉じないようにもします。 このようなトランザクションのコンテキストでクエリと SubmitChanges 実行を実行できます。
暗黙的なトランザクション
SubmitChangesを呼び出すと、LINQ to SQL は、呼び出しがTransactionのスコープ内にあるかどうか、または Transaction
プロパティ (IDbTransaction
) がユーザー開始ローカル トランザクションに設定されているかどうかを確認します。 どちらのトランザクションも見つからない場合、LINQ to SQL はローカル トランザクション (IDbTransaction
) を開始し、それを使用して生成された SQL コマンドを実行します。 すべての SQL コマンドが正常に完了すると、LINQ to SQL はローカル トランザクションをコミットして返します。