Database.BeginTransaction vs Transactions.TransactionScope

87

Quelle est la différence entre System.Transactions.TransactionScopeet EF6 Database.BeginTransaction?

Quelqu'un pourrait-il donner un petit exemple ou simplement expliquer lequel utiliser lorsqu'il y a une nette différence?

PS: 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.BeginTransactionet maintenant MS a introduit ce nouveau Database.BeginTransactiondans EF6.

Flair
la source

Réponses:

97

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 API: Database.BeginTransaction()et Database.UseTransaction(). Bien qu'il System.Transactions.TransactionScopesoit toujours très bien pris en charge, il n'est plus nécessaire pour la plupart des utilisateurs d'EF6.

Alors que Database.BeginTransaction()n'est utilisé que pour les transactions d'opérations liées à la base de données,, System.Transactions.TransactionScopeen plus de cela, permet au «code C # simple» d'être également transactionnel.

Par conséquent, utilisez Database.BeginTransaction()partout où vous ne faites que des opérations liées à la base de données dans une transaction dans EF6, sinon utilisez-le System.Transactions.TransactionScopepour mélanger les opérations de base de données et le code C # dans une transaction.

Pour ceux qui préfèrent toujours l' TransactionScopeapproche, 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).

Vous trouverez plus d'informations ici

Flair
la source
11
Malheureusement, vous ne pouvez pas imbriquer les transactions avec Database.BeginTransaction, contrairement à TransactionScope.
Triynko
8
Que signifie vraiment «code C # pur» pour être également transactionnel?
Gerard
@Gerard Je suppose que cela signifie que si vous effectuez des opérations SQL en dehors d'EF (comme utiliser ADO.NET), ces opérations se produiront également sous la même transaction.
Rudey le