委托方法的Dapper事务

时间:2017-07-03 16:53:28

标签: c# .net dapper

我正在使用dapper和存储库模式。下面是单个存储库插入的代码。我需要在事务服务层中调用2个或更多存储库(在savecustomer方法中)。如何申请以下方法的交易?

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

1 个答案:

答案 0 :(得分: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;
    }
}

您还可以在此处使用Dapper获取通用存储库的示例代码:https://stackoverflow.com/a/45460483/5779732