2011-12-27 5 views
0

L2Sで複数のクエリを実行する必要があるたびに、TransactionScopeを使用して明示的にトランザクションを作成しています。今日私の同僚は、L2SがSubmitChangesレベルでそれをやっているので、トランザクションを手動で作成することは決してないと言いました。私は混乱していたので、テストするためのサンプルコードをいくつか作成しました。私がこれまでのところ理解したように、彼は正しいのです。 私の質問は、linqの初めからsqlに利用可能だったのですか、これはいくつかの.netバージョン/サービスパックに追加されましたか? ネットでは、L2Sと一緒にTransactionScopeを使用する方法のサンプルがたくさんあるので、これらの人々のすべてがそれを見逃している可能性はありませんか?linq to sql:トランザクションを明示的に作成する必要はありますか?

+0

L2Sは、初期のベータ版以降にSubmitChangesのトランザクションを作成しました。これは、例外が発生したときにアクションをロールバックする機能を有効にします( 'SubmitChanges(ConflictMode.ContinueOnConflict)'を参照)。 –

答えて

0

明示的なTransactionScopesは、単一のトランザクションで複数のクエリと複数の呼び出しを1つのトランザクション...にラップしたい場合は値を持ちますが、オブジェクトグラフを保存すると(DBに複数の挿入/更新文が生成されます) SaveChangesが呼び出されると、それらのステートメントは自動的にトランザクションにラップされます。

1

すべての変更を行い、SubmitChanges()を一度呼び出すと、トランザクションが自動的に作成されます。

TransactionScopeを気にする必要があるのは、SubmitChanges()に複数の電話をかけたり、複数のコンテキストで動作するトランザクションが必要な場合だけです。

関連する問題