长沙免费建站网络营销,网站设计制作过程,全flash网站设计,重庆妇科医院排名前十咨询区 Amit#xff1a;我的项目中使用 dapper.net 做数据库连接框架#xff0c;有一个需求需要在多个表上执行多次插入操作#xff0c;我想把它 事务化#xff0c;但我看 dapper 并没有提供类似的方式。请问我该如何使用 dapper 来做这项工作呢#xff1f;回答区 Newteq … 咨询区 Amit我的项目中使用 dapper.net 做数据库连接框架有一个需求需要在多个表上执行多次插入操作我想把它 事务化但我看 dapper 并没有提供类似的方式。请问我该如何使用 dapper 来做这项工作呢回答区 Newteq Developer如果用 Dapper 实现事务功能大概有三种实现方式。简单的事务方法这种事务方式很原始就是在已存在的 Connection 上创建 Transaction 然后将事务作为参数传递到 Execute 方法中当业务逻辑处理完后再做 commit 提交参考如下代码string sql INSERT INTO Customers (CustomerName) Values (CustomerName);;using (var connection new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{connection.Open();using (var transaction connection.BeginTransaction()){connection.Execute(sql, new {CustomerName Mark}, transaction: transaction);connection.Execute(sql, new {CustomerName Sam}, transaction: transaction);connection.Execute(sql, new {CustomerName John}, transaction: transaction);transaction.Commit();}
}使用 TransactionScope如果你喜欢用 TransactionScope 方式有一点要注意那就是需要在 connection 创建之前创建 Scope然后在 Scope 作用域内做你想做的sql操作最后执行一个 complete 提交即可参考如下代码using (var transaction new TransactionScope())
{var sql INSERT INTO Customers (CustomerName) Values (CustomerName);;using (var connection My.ConnectionFactory()){connection.Open();connection.Execute(sql, new {CustomerName Mark});connection.Execute(sql, new {CustomerName Sam});connection.Execute(sql, new {CustomerName John});}transaction.Complete();
}使用 Dapper Transaction 方式这是使用 Dapper 最推荐的方式毕竟它的代码语义太强了你可以直接在 new 出的 Transaction 之上执行各自的sql语句参考如下代码string sql INSERT INTO Customers (CustomerName) Values (CustomerName);;using (var connection new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{connection.Open();using (var transaction connection.BeginTransaction()){transaction.Execute(sql, new {CustomerName Mark});transaction.Execute(sql, new {CustomerName Sam});transaction.Execute(sql, new {CustomerName John});transaction.Commit();}
}点评区 说实话这三种方式总结的特别好但有一点看着很不爽那就是在执行 Transaction 之前需要 connection.Open()有点繁琐所以这一块还是可以再封装一下的。