3 votes

Comment annuler une transaction en utilisant les patterns Unit of Work et Repository ?

J'ai un référentiel d'utilisateurs, qui effectue tous les accès aux données des utilisateurs. J'ai également une classe d'unité de travail qui gère la connexion et la transaction pour mes référentiels. Comment puis-je efficacement annuler une transaction sur ma classe d'unité de travail, si une erreur se produit dans mon référentiel ?

Create sur mon UserRepository. J'utilise Dapper pour DataAccess.

try
{
    this.Connection.Execute("User_Create", parameters, this.Transaction, 
        commandType: CommandType.StoredProcedure);
}
catch (Exception)
{
    //Need to tell my unit of work to rollback the transaction.                
}

Je passe la connexion et la transaction qui ont été créées dans mon constructeur d'unité de travail à mes référentiels. Vous trouverez ci-dessous une propriété de ma classe d'unité de travail.

public UserRepository UserRepository
{
    get
    {
        if (this._userRepository == null)
            this._userRepository = 
                new UserRepository(this._connection, this._transaction);
        return this._userRepository;
    }
}

J'espère trouver la meilleure approche.

* Mise à jour * Après avoir fait plus de recherches sur le modèle d'unité de travail, je pense que je l'utilise complètement à tort dans mon exemple.

5voto

BrokenGlass Points 91618

Les supports Dapper TransactionScope qui fournit un Complete() pour valider la transaction, si vous n'appelez pas la méthode Complete() la transaction est interrompue.

using (TransactionScope scope = new TransactionScope())
{
   //open connection, do your thing
   scope.Complete();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X