Database.BeginTransaction vs İşlemler.TransactionScope


90

System.Transactions.TransactionScopeVe EF6'lar arasındaki fark nedirDatabase.BeginTransaction ?

Birisi küçük bir örnek verebilir mi veya hangisinin ne zaman açık bir farkla kullanılacağını açıklayabilir mi?

Not: Projemde EF6 kullanıyorum. Belgeleri zaten okudum ama pek yardımcı olmadı. Örneklere de baktım ama daha çok kullanıyorlar SqlConnection.BeginTransactionve şimdi MS bu yeniyi Database.BeginTransactionEF6'da tanıttı.

Yanıtlar:


98

Entity Framework 6'nın belgelerinde cevabı buldum:

EF6'nın tanıtımıyla Microsoft, yeni API yöntemlerinin kullanılmasını önerir: Database.BeginTransaction()ve Database.UseTransaction(). System.Transactions.TransactionScopeHala çok iyi desteklenmesine rağmen , çoğu EF6 kullanıcısı için artık gerekli değildir.

İken Database.BeginTransaction()tek veritabanı ile ilgili işlemler işlem için kullanılır, System.Transactions.TransactionScopebu ek olarak, bu düz C # kod 'için olası ayrıca işlem olması mümkün kılar.

Bu nedenle, Database.BeginTransaction()EF6'daki bir işlemde yalnızca db ile ilgili işlemleri yaparken kullanın, aksi takdirdeSystem.Transactions.TransactionScope , db işlemlerini ve C # kodunu karıştırmak için .

Hala TransactionScopeyaklaşımı tercih edenler için , özellikle bulut senaryolarında (bulut senaryoları dağıtılmış işlemleri desteklemez) sınırlamalarını kontrol etmeleri önerilir.

Daha fazla bilgi burada bulunabilir


11
Maalesef, TransactionScope ile işlemleri Database.BeginTransaction ile iç içe yerleştiremezsiniz.
Triynko

8
"Düz C # kodu" aynı zamanda işlemsel olmak "gerçekten ne anlama geliyor?
Gerard

@Gerard Sanırım EF dışında SQL işlemleri yaparsanız (ADO.NET kullanmak gibi), bu işlemler de aynı işlem altında gerçekleşecektir.
Rudey
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.