2017-07-03 1 views
1

Ich verwende Dapper mit Repository-Muster. Im Folgenden finden Sie den Code für das Einfügen eines einzelnen Repositorys. Ich muss 2 oder mehr Repositorys in Service-Layer mit Transaktion (in Savecomuter-Methode) aufrufen. Wie man die Transaktion für die folgende Methode anwendet?Dapper Transaktion für Delegate-Methode

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

Und meine vereinfachte Aufrufort:

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

ja ,, aber ich muss der Transaktion in der gleichen Methode verwenden, .. ich bereits in der Frage erwähnt..pls entfernen Duplikat – Ljt

Antwort

1

Wenn Sie Ihre Transaktion außerhalb der Repositories erweitern möchten, beachten Sie bitte UnitOfWork verwenden. Die detaillierte Code könnte hier: https://stackoverflow.com/a/45029588/5779732

Mit diesem Code können Sie die Transaktion über mehrere Repositories wie unten erstrecken: https://stackoverflow.com/a/45460483/5779732

:

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; 
    } 
} 

Sie können auch Beispielcode für generische Repository mit Dapper hier

+0

Dank @amit für Ihre detaillierte Erklärung..ich werde prüfen ... ist es möglich zu verwenden die gleiche Methode in .net Kern? – Ljt

+0

Kann pls das Repository-Klassenbeispiel bereitstellen? – Ljt

+0

Ich vermute, Sie haben Ihre Repositories bereits erstellt. Sie müssen diese nur so anpassen, dass sie durch Injektion die UOW akzeptieren. Ich habe die ** verknüpfte ** Antwort aktualisiert, um Repositories einzuschließen. –