2017-07-03 1 views
1

J'utilise dapper avec le modèle de référentiel. Vous trouverez ci-dessous le code d'insertion d'un référentiel unique. J'ai besoin d'appeler 2 dépôts ou plus dans la couche de service avec la transaction (dans la méthode savecustomer). Comment appliquer une transaction pour la méthode suivante?Dapper transaction pour la méthode déléguée

Protected void Execute(Action<IDbConnection> query) { 
     using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDB"].ConnectionString)) 
     { 
      query.Invoke(db); 
     } 
    } 

Et mon site d'appel simplifié:

public void SaveCustomer(CustomerDTO custDTO) 
{ 
    Execute(db => db.Execute(saveCustSp, custDTO, CommandType.StoredProcedure)); 
} 
+0

oui, mais j'ai besoin d'utiliser de transaction dans la même méthode, .. j'ai déjà mentionné dans la question..pls supprimer dupliquer – Ljt

Répondre

1

Si vous souhaitez prolonger votre transaction en dehors des dépôts, s'il vous plaît envisager d'utiliser UnitOfWork. Le code détaillé se trouve ici: https://stackoverflow.com/a/45029588/5779732

Avec ce code, vous pouvez transaction étendre sur plusieurs référentiels comme ci-dessous:

using(DalSession dalSession = new DalSession()) 
{ 
    UnitOfWork unitOfWork = dalSession.UnitOfWork; 
    unitOfWork.Begin(); 
    try 
    { 
     //Your database code here 
     repository1.DoThis(); 
     repository2.DoThat(); 

     unitOfWork.Commit(); 
    } 
    catch 
    { 
     unitOfWork.Rollback(); 
     throw; 
    } 
} 

Vous pouvez également obtenir un exemple de code référentiel générique Dapper ici: https://stackoverflow.com/a/45460483/5779732

+0

Merci @amit pour votre explication détaillée .. Je vais vérifier ... est-il possible d'utiliser la même méthode dans le noyau .net? – Ljt

+0

Est-ce que pls peut fournir l'exemple de classe de référentiel? – Ljt

+0

Je suppose que vous avez déjà créé vos dépôts. Vous avez juste besoin de modifier ceux qui acceptent de l'UOW par injection. J'ai mis à jour la réponse ** linked ** pour inclure les dépôts. –