Il y a 3 approches pour effectuer des transactions dans Dapper.
- Transaction simple
- Transaction de la portée de la transaction
- Utilisation de Dapper Transaction ( paquet nuget supplémentaire et l'approche la plus privilégiée )
Vous pouvez en savoir plus sur ces méthodes de transaction sur le site officiel du tutoriel. ici
Pour référence, voici une ventilation des approches de la transaction
1. Transaction simple
Dans cet exemple, vous créez une transaction sur une connexion db existante, puis vous passez la transaction à la méthode Execute sur dapper (qui est un paramètre facultatif).
Une fois que vous avez fait tout votre travail, il suffit de valider la transaction.
string sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";
using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
connection.Open();
using (var transaction = connection.BeginTransaction())
{
connection.Execute(sql, new {CustomerName = "Mark"}, transaction: transaction);
connection.Execute(sql, new {CustomerName = "Sam"}, transaction: transaction);
connection.Execute(sql, new {CustomerName = "John"}, transaction: transaction);
transaction.Commit();
}
}
2. Transaction du périmètre de la transaction
Si vous souhaitez créer une portée de transaction, vous devrez le faire avant la création de la connexion à la base de données. Une fois que vous avez créé l'étendue de la transaction, vous pouvez simplement effectuer toutes vos opérations et ensuite faire un appel unique pour terminer la transaction, qui validera alors toutes les commandes.
using (var transaction = new TransactionScope())
{
var sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";
using (var connection = My.ConnectionFactory())
{
connection.Open();
connection.Execute(sql, new {CustomerName = "Mark"});
connection.Execute(sql, new {CustomerName = "Sam"});
connection.Execute(sql, new {CustomerName = "John"});
}
transaction.Complete();
}
3. Utilisation de la transaction Dapper
C'est l'approche la plus favorable pour réaliser une transaction dans le code, car elle rend le code facile à lire et à mettre en œuvre. Il existe une implémentation étendue de SQL Transaction appelée Dapper Transaction (que vous pouvez trouver à l'adresse suivante ici ), qui vous permet d'exécuter directement les exécutions SQL des transactions.
string sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";
using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
connection.Open();
using (var transaction = connection.BeginTransaction())
{
transaction.Execute(sql, new {CustomerName = "Mark"});
transaction.Execute(sql, new {CustomerName = "Sam"});
transaction.Execute(sql, new {CustomerName = "John"});
transaction.Commit();
}
}