2017-07-03 34 views
1

我正在使用存儲庫模式的dapper。以下是單個存儲庫插入的代碼。我需要使用事務(在savecustomer方法中)在服務層調用2個或更多存儲庫。如何爲以下方法申請交易?代表方法的小巧事務

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

我的簡化呼叫的網站:

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

是的,但我需要使用相同的方法交易,..我已經在問題中提到..請刪除重複 – Ljt

回答

1

如果你想在倉庫外擴您的交易,請考慮使用的UnitOfWork。詳細的代碼可以在這裏找到:https://stackoverflow.com/a/45029588/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; 
    } 
} 

您還可以得到示例代碼的通用存儲庫小巧玲瓏的位置:https://stackoverflow.com/a/45460483/5779732

+0

謝謝@amit爲您的詳細解釋..我會檢查...是否有可能使用.net核心中的相同方法? – Ljt

+0

是否可以提供存儲庫類示例? – Ljt

+0

我想你已經創建了你的倉庫。你只需要修改它們以通過注入來接受UoW。我更新了**鏈接的**答案以包含存儲庫。 –