Oracle
 sql >> Datenbank >  >> RDS >> Oracle

EF und TransactionScope für SQL Server und Oracle ohne Eskalation/Umspannung auf DTC?

Erstens:Verwenden Sie niemals var ts = new TransactionScope() . Ist der eine Liner, der Ihre App tötet. Verwenden Sie immer den expliziten Konstruktor, mit dem Sie die Isolationsstufe angeben können. Siehe die Verwendung von new TransactionScope() als schädlich angesehen.

Nun zu Ihrer Frage:Die Logik, zwei Verbindungen im gleichen Bereich nicht in DTC hochzustufen, hängt stark davon ab, dass die Treiber / Anbieter zusammenarbeiten, um das System zu informieren die beteiligten Ressourcenmanager sind die gleichen. SqlClient nach SQL Server 2008 ist ein Treiber, der diese Logik ausführen kann. Der von Ihnen verwendete Oracle-Treiber ist es nicht (und mir ist übrigens keine Version bekannt).

Letztendlich ist wirklich, wirklich, wirklich grundlegend:Wenn Sie keinen DTC wollen, erstellen Sie keinen! Stellen Sie sicher, dass Sie genau eine Verbindung im Bereich verwenden. Es ist klar, dass Sie keine zwei Verbindungen benötigen. Mit anderen Worten:Entfernen Sie die beiden getrennten Repositories in Ihrem Datenmodell. Verwenden Sie nur ein Repository für Bestellungen, Inventar und was sonst noch was nicht. Damit schießt du dir selbst ins Knie und fragst nach Feenstaub-Lösungen.

Update:Oracle-Treiber 12c r1:

"Transaktions- und Verbindungszuordnung:ODP.NET-Verbindungen werden standardmäßig nur dann von Transaktionen getrennt, wenn Verbindungsobjekte geschlossen oder Transaktionsobjekte verworfen werden"