2017-07-03 37 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。我更新了**链接的**答案以包含存储库。 –