Quelle est la différence entre System.Transactions.TransactionScope
et EF6 Database.BeginTransaction
?
Quelqu'un pourrait-il donner un petit exemple ou simplement expliquer lequel utiliser quand avec une différence claire?
P.S: Dans mon projet, j'utilise EF6. J'ai déjà lu la documentation mais cela n'a pas beaucoup aidé. J'ai également consulté les exemples, mais ils utilisent plutôt SqlConnection.BeginTransaction
et maintenant MS a introduit ce nouveau Database.BeginTransaction
dans EF6.
J'ai trouvé la réponse dans la documentation d'Entity Framework 6:
Avec l'introduction d'EF6, Microsoft recommande d'utiliser de nouvelles méthodes d'API: Database.BeginTransaction()
et Database.UseTransaction()
. Bien que System.Transactions.TransactionScope
Soit toujours très bien pris en charge, il n'est plus nécessaire pour la plupart des utilisateurs d'EF6.
Alors que Database.BeginTransaction()
est utilisé uniquement pour la transaction d'opérations liées à la base de données, System.Transactions.TransactionScope
, En plus de cela, permet au "code C # ordinaire" d'être également transactionnel.
Par conséquent, utilisez Database.BeginTransaction()
lorsque vous ne faites que des opérations liées à db dans une transaction dans EF6, sinon utilisez System.Transactions.TransactionScope
Pour mélanger les opérations db et le code C # dans une transaction.
Pour ceux qui préfèrent encore l'approche TransactionScope
, il est recommandé de vérifier ses limites, en particulier dans les scénarios cloud (les scénarios cloud ne prennent pas en charge les transactions distribuées).
De plus amples informations peuvent être trouvées ici