J'ai quelques scénarios où j'ai besoin d'avoir plusieurs appels à .SubmitChanges() sur un datacontext, mais je veux explicitement contrôler la transaction moi-même pour la rendre atomique. Pendant un certain temps, j'ai fait cela en créant une connexion, en créant une transaction sur cette connexion, puis en créant le datacontext et en lui passant les deux. Supposons pour l'instant que je ne veuille pas utiliser TransactionScope à la place. Mon code ressemble à ceci :
Using conn As New SqlConnection("connection string...")
conn.Open()
Using trans = conn.BeginTransaction()
Dim dc as new DataContext(conn)
dc.Transaction = trans
' do some work
trans.Commit()
End Using
End Using
J'ai commencé à utiliser le profileur Linq To SQL et il casse ce code. Pour une raison quelconque, il exige que vous utilisiez la propriété .Connection sur le datacontext pour créer la transaction. Il échoue si vous utilisez la variable de connexion directement (ce qui me semble idiot). Ma question est de savoir s'il est plus approprié de procéder de cette manière :
Using conn As New SqlConnection("connection string...")
conn.Open()
Dim dc as new DataContext(conn)
Using trans = dc.Connection.BeginTransaction()
dc.Transaction = trans
' do some work
trans.Commit()
End Using
End Using
Quelle est la méthode la plus largement acceptée ?