sql >> データベース >  >> RDS >> Oracle

DTCにエスカレーション/スパンせずにSQLServerとOracleの両方のEFとTransactionScope?

    まず、var ts = new TransactionScope()は絶対に使用しないでください 。あなたのアプリを殺すワンライナーです。分離レベルを指定できる明示的なコンストラクターを常に使用してください。有害と考えられる新しいTransactionScope()の使用を参照してください。

    ここであなたの質問について:同じスコープ内の2つの接続をDTCに昇格させないロジックは、システムに通知するために協力するドライバー/プロバイダーに大きく依存しています.2つの異なる接続が分散トランザクションを単独でうまく管理できるというトランザクション。関係するリソースマネージャーは同じです。 SQL Server 2008以降のSqlClientは、このロジックを実行できるドライバーです。使用しているOracleドライバーはそうではありません(そして私はバージョンを知りません、ところで)。

    最終的には本当に本当に基本的です。DTCが必要ない場合は、作成しないでください。スコープ内で使用する接続は1つだけにしてください。 2つの接続が必要ないことは明らかです。つまり、データモデル内の2つの別々のリポジトリを削除します。 Orders、Inventoryなどに1つのリポジトリのみを使用します。あなたは彼らと一緒に足を撃ち、ピクシーダストソリューションを求めています。

    更新:Oracleドライバー12c r1:

    「トランザクションと接続の関連付け:デフォルトでは、ODP.NET接続は、接続オブジェクトが閉じられているか、トランザクションオブジェクトが破棄されている場合にのみトランザクションから切り離されます」



    1. DISTINCTを使用して可能なパーティション関数COUNT()OVER

    2. PostgreSQL:ブール列のインデックスを作成します

    3. SQLServerのビューからSCHEMABINDINGを削除します

    4. T-SQLを使用してSQLServerエージェントジョブを実行する方法