场景:经常遇到多个业务数据需要同时处理的时候,需要使用到事务,但是事务的调用代码又显得比较累赘,传统的写法如:
怎么解决这种问题,不防利用委托来进行代码封装,封装代码如下:
/// <summary>
/// 事务执行
/// </summary>
/// <param name="action">执行的内容</param>
/// <param name="dbName">数据库的连接</param>
public static void TranExtcute(Action<IDbTransaction> action, string dbName = AIBVendingMachine.dbName)
{
IDbConnection dbTcUsan = DataSource.GetConnection(dbName);
dbTcUsan.Open();
IDbTransaction tran = dbTcUsan.BeginTransaction();
try
{
action.Invoke(tran);//执行的内容
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
throw new Exception(ex.Message);
}
finally
{
if (dbTcUsan != null)
{
dbTcUsan.Close();
}
}
}
调用端代码:
CommonRule.TranExtcute(tran =>
{
foreach (var item in stock)
{
DalHelper.Del(item, tran, new SqlNote("****", "删除仓库与伞关系"));
}
DalHelper.ExecuteNonQuery(sql, null, tran, new SqlNote("****", "修改仓库库存数量"));
DalHelper.Add(track, tran, new SqlNote("****", "雨伞轨迹"));
});
是不是很简单了!!!