委托方法的 Dapper 事务
Dapper transaction for delegate method
我正在使用带有存储库模式的小巧玲珑。下面是单个存储库插入的代码。我需要使用事务调用服务层中的 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));
}
如果您想将事务扩展到存储库之外,请考虑使用 UnitOfWork。详细代码可以在这里找到:
使用此代码,您可以跨多个存储库进行事务处理,如下所示:
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 获取通用存储库的示例代码:
我正在使用带有存储库模式的小巧玲珑。下面是单个存储库插入的代码。我需要使用事务调用服务层中的 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));
}
如果您想将事务扩展到存储库之外,请考虑使用 UnitOfWork。详细代码可以在这里找到:
使用此代码,您可以跨多个存储库进行事务处理,如下所示:
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 获取通用存储库的示例代码: