sql >> Database teknologi >  >> RDS >> Oracle

EF og TransactionScope til både SQL Server og Oracle uden at eskalere/spænde til DTC?

For det første:brug aldrig var ts = new TransactionScope() . Er den ene liner, der dræber din app. Brug altid den eksplicitte konstruktør, der lader dig specificere isolationsniveauet. Se brug af nye TransactionScope() betragtes som skadelig.

Nu til dit spørgsmål:logikken i ikke at promovere to forbindelser i samme omfang ind i DTC afhænger i høj grad af, at chaufføren/udbyderne samarbejder om at informere Systemet. Transaktioner om, at de to adskilte forbindelser er i stand til at administrere den distribuerede transaktion fint på egen hånd, fordi de involverede ressourceforvaltere er de samme. SqlClient post SQL Server 2008 er en driver, der er i stand til at udføre denne logik. Den Oracle-driver, du bruger, er det ikke (og jeg er ikke bekendt med nogen version, det er, btw).

I sidste ende er virkelig virkelig virkelig grundlæggende:Hvis du ikke vil have en DTC, skal du ikke oprette en! Sørg for at bruge præcis én forbindelse i scopet. Det kan klart diskuteres, at du ikke behøver to forbindelser. Med andre ord skal du slippe af med de to separate depoter i din datamodel. Brug kun ét lager til ordrer, inventar og hvad ellers hvad ikke. Du skyder dig selv i foden med dem, og du beder om nissestøvløsninger.

Opdatering:Oracle-driver 12c r1:

"Transaktions- og forbindelsestilknytning:ODP.NET-forbindelser adskilles som standard kun fra transaktioner, når forbindelsesobjekter lukkes, eller transaktionsobjekter bortskaffes"



  1. At spise vores eget hundefoder – Kører JIRA på MariaDB

  2. Integrering af ServiceNow med Oracle Identity Cloud Service (IDCS)

  3. Installer mysql-python (Windows)

  4. SQL - Hvordan gemmer og navigerer man i hierarkier?