我正在使用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));
}
答案 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