sql >> Databáze >  >> RDS >> Oracle

EF a TransactionScope pro SQL Server i Oracle bez eskalace/překlenutí na DTC?

Za prvé:nikdy nepoužívejte var ts = new TransactionScope() . Je to jediná vložka, která zabije vaši aplikaci. Vždy používejte explicitní konstruktor, který vám umožní určit úroveň izolace. Viz použití nové TransactionScope() považované za škodlivé.

Nyní k vaší otázce:logika nepovyšovat dvě připojení ve stejném rozsahu do DTC do značné míry spoléhá na řidiče/poskytovatele spolupracující při informování System.Transactions, že tato dvě odlišná připojení jsou schopna samostatně řídit distribuovanou transakci, protože zapojení správci zdrojů jsou stejní. SqlClient post SQL Server 2008 je ovladač, který je schopen tuto logiku provádět. Ovladač Oracle, který používáte, není (a nejsem si vědom žádné verze, která je, btw).

V konečném důsledku je to opravdu opravdu základní:pokud nechcete DTC, nevytvářejte jej! Ujistěte se, že používáte přesně jedno připojení v rozsahu. Je jasně diskutabilní, že nepotřebujete dvě připojení. Jinými slovy, zbavte se dvou samostatných úložišť ve svém datovém modelu. Používejte pouze jedno úložiště pro objednávky, inventář a co ještě ne. Střílíte si s nimi do nohy a žádáte o řešení skřítkového prachu.

Aktualizace:Oracle driver 12c r1:

"Přidružení transakcí a připojení:připojení ODP.NET se ve výchozím nastavení oddělují od transakcí pouze v případě, že jsou objekty připojení uzavřeny nebo jsou objekty transakcí zlikvidovány"



  1. MySQL - UPDATE dotaz založený na SELECT dotazu

  2. MySQL přidává k datu dny

  3. Řešení chyb Oracle

  4. Jak upgradovat z MariaDB 10.4 na MariaDB 10.5