System.Transactions TransactionScopeのデフォルトのIsolationlevelがSerializableである理由
疑問点
私はちょうど良い
を使用する良い理由は何でしょうか?
をデフォルトの分離レベルとして使用する良い理由は何なのでしょうか?
System.Transactions
トランザクションスコープ
は、思いつかないので(そして、デフォルトを
web/app.config
で変更できないようなので、常にコードで設定する必要があります)
using(var transaction = TransactionScope())
{
... //creates a Transaction with Serializable Level
}
代わりに、私はいつもこのような定型的なコードを書かなければなりません。
var txOptions = new System.Transactions.TransactionOptions();
txOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
using(var transaction = new TransactionScope(TransactionScopeOption.Required, txOptions))
{
...
}
何かアイデアはありますか?
どのように解決するのですか?
事実
Serializable
がデフォルトであることは、.NET がまだリリースされていなかった時代 (1999 年以前) から、DTC (
分散トランザクション コーディネータ
) プログラミングに由来します。
DTC はネイティブの ISOLATIONLEVEL 列挙しています。
分離レベル_シリアライズ可能 現在のトランザクションによって読み取られたデータは 現在のトランザクションが終了するまで、他のトランザクションによって変更されることはありません。 が終了するまで、他のトランザクションによって変更されることはありません。現在のトランザクションに影響を与えるような新しいデータを挿入することはできません。 を挿入することはできません。 これは最も安全な分離レベルであり、デフォルトです。 しかし、最も低いレベルの並行処理が可能です。
.NET
TransactionScope
はこれらの技術の上に構築されています。
さて、次の疑問は、なぜDTCが定義する
ISOLATIONLEVEL_SERIALIZABLE
をデフォルトのトランザクションレベルとして定義しているのでしょうか?それは、DTCが1995年頃(確実に1999年以前)に設計されたからでしょう。当時、標準SQLはSQL-92(またはSQL2)でした。
そして、以下がその内容です。 SQL-92 はトランザクションレベルについて述べています。
SQLトランザクションはREAD UNCOMMITTED、READ COMMITTED、SERIALIZABLEのいずれかの分離レベルを持ちます。 READ COMMITTED、REPEATABLE READ、またはSERIALIZABLEです。SQLトランザクションの分離レベル SQLトランザクションの分離レベルは、その中のSQLデータやスキーマに対する操作が、どの程度まで可能かを定義します。 SQLトランザクションの分離レベルは、そのSQLトランザクション内のSQLデータまたはスキーマに対する操作が、どの程度の影響を受けるかを定義します。 SQL-トランザクション内のSQLデータやスキーマに対する操作が、どの程度 の操作に影響を与える程度を定義します。 SQL-トランザクションの分離レベルはSERIALIZABLEです。 トランザクションの分離レベルはデフォルトではSERIALIZABLEです。 . このレベルは明示的に で設定することができます。
<set transaction statement>
.分離レベルの同時実行SQLトランザクションの実行は SERIALIZABLEはシリアライザブルであることが保証されています。直列化可能な 実行とは、同時に実行されるSQLトランザクションの操作の実行であると定義されます。 同時実行するSQLトランザクションの操作の実行で、同じSQLトランザクションの直列実行と同じ効果をもたらすものです。 同じSQLトランザクションの直列実行と同じ効果をもたらすものです。直列実行とは 直列実行とは,各SQLトランザクションが次のSQLトランザクションが始まる前に完了するよう 次の SQL-トランザクションが始まる前に完了するものです。
関連
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】URLから画像をダウンロードする方法
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] EqualsメソッドがオーバーライドされたときにGetHashCodeをオーバーライドすることが重要な理由は何ですか?
-
[解決済み] C#でHashtableよりDictionaryが好まれる理由とは?
-
[解決済み】一部のマシンでTransactionScopeが自動的にMSDTCにエスカレートする?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。