项目中有这样一种情况,分了几个页面的参数设置,他们对应了数据库中的几张表。
当界面中修改了这些参数的时候,对应的数据库中的数据也需要更新。
不过有个需求就是,更新的时候,需要这几张表作为一个整体一起更新,实际码代码的时候,碰到这样的Bug,就是第一张表的数据更新成功了,但是其余几张表都失败了。这种情况下,我得到的数据库更新就特别恶心。我不需要这样的更新,我宁愿几张表都更新失败。
所以就用上了sql里面的事务处理。
using (IDbConnection connection = new SqlConnection(mConnectionString))
{
//在不使用事务的时候,比如增删改查,dapper会自动为我们打开连接
//事务的时候,需要自己手动打开
connection.Open();
IDbTransaction transaction = connection.BeginTransaction();
try
{
//1.向数据库中的GlobalSetting表中插入一条数据
InsertGlobalSetting(connection,transaction, newStationType, globalSetting);
//2.向数据库中的MockLevel表中插入多条数据
InsertMockLevel(connection, transaction, newStationType, mockLevels);
//3.向数据库中的StoreySetting表中插入多条数据
InsertStoreySetting(connection, transaction, newStationType, storeyViewModels);
//4.向数据库中的MockRoom表中插入多条数据
InsertMockRoom(connection, transaction, newStationType, storeyViewModels);
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
throw;
}
}
需要注意的是,在使用事务的时候,
1.手动打开连接;
2.事务中的query和execute都需要加入IDbTransaction类型的参数