sql >> Databasteknik >  >> RDS >> Oracle

EF och TransactionScope för både SQL Server och Oracle utan att eskalera/spänna till DTC?

För det första:använd aldrig var ts = new TransactionScope() . Är den enda liner som dödar din app. Använd alltid den explicita konstruktorn som låter dig specificera isoleringsnivån. Se att använda nya TransactionScope() anses skadligt.

Nu angående din fråga:logiken att inte marknadsföra två anslutningar i samma omfattning till DTC är starkt beroende av att föraren/leverantörerna samarbetar för att informera System.Transactions om att de två distinkta anslutningarna kan hantera den distribuerade transaktionen alldeles utmärkt på egen hand eftersom de inblandade resursförvaltarna är desamma. SqlClient post SQL Server 2008 är en drivrutin som kan göra denna logik. Oracle-drivrutinen du använder är det inte (och jag är inte medveten om någon version, btw).

I slutändan är det verkligen verkligen väldigt grundläggande:om du inte vill ha en DTC, skapa inte en! Se till att du använder exakt en anslutning i omfattningen. Det är klart att man inte behöver två anslutningar. Med andra ord, bli av med de två separata förråden i din datamodell. Använd endast ett förråd för beställningar, inventering och vad annat vad inte. Du skjuter dig själv i foten med dem och du ber om lösningar för pixie dust.

Uppdatering:Oracle-drivrutin 12c r1:

"Transaktions- och anslutningsassociation:ODP.NET-anslutningar kopplas som standard från transaktioner endast när anslutningsobjekt stängs eller transaktionsobjekt kasseras"



  1. Ms-Access VBA Class Object Arrays

  2. Hur man använder KNN Machine Learning Model med 2UDA – PostgreSQL och Orange (Del 1)

  3. Aktiverar tvåfaktorsautentisering för ScaleGrid DBaaS

  4. Organisera ditt hemmakontor för ökad produktivitet