Database.BeginTransaction vs Transactions.TransactionScope


91

Jaka jest różnica między System.Transactions.TransactionScopei EF6 Database.BeginTransaction?

Czy ktoś mógłby podać mały przykład lub po prostu wyjaśnić, którego użyć, gdy z wyraźną różnicą?

PS: W moim projekcie używam EF6. Przeczytałem już dokumentację, ale niewiele to pomogło. Przyjrzeliśmy się również przykładom, ale raczej używają, SqlConnection.BeginTransactiona teraz MS wprowadziło to nowe Database.BeginTransactionw EF6.

Odpowiedzi:


99

Znalazłem odpowiedź w dokumentacji Entity Framework 6:

Wraz z wprowadzeniem EF6 firma Microsoft zaleca korzystanie z nowych metod API: Database.BeginTransaction()i Database.UseTransaction(). Chociaż System.Transactions.TransactionScopenadal jest bardzo dobrze obsługiwany, nie jest już potrzebny dla większości użytkowników EF6.

Chociaż Database.BeginTransaction()jest używany tylko do transakcji operacji związanych z bazą danych System.Transactions.TransactionScope, oprócz tego umożliwia to, że `` zwykły kod C # '' może być również transakcyjny.

Dlatego używaj Database.BeginTransaction()wszędzie tam , gdzie kiedykolwiek wykonujesz tylko operacje związane z db w transakcji w EF6, w przeciwnym razie używaj System.Transactions.TransactionScopedo mieszania operacji db i kodu C # razem w transakcji.

Tym, którzy nadal preferują to TransactionScopepodejście, zaleca się sprawdzenie jego ograniczeń, szczególnie w scenariuszach chmurowych (scenariusze chmurowe nie obsługują transakcji rozproszonych).

Więcej informacji można znaleźć tutaj


12
Niestety nie możesz zagnieżdżać transakcji w Database.BeginTransaction, podczas gdy możesz to robić w TransactionScope.
Triynko

8
Co naprawdę oznacza „zwykły kod C #, który ma być również transakcyjny”?
Gerard

@Gerard Zakładam, że oznacza to, że jeśli wykonujesz operacje SQL poza EF (jak przy użyciu ADO.NET), te operacje będą również miały miejsce w ramach tej samej transakcji.
Rudey
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.