问题描述

当前有需求,在C#程序开发中需要使用Dapper对数据库的多个表分别进行写入操作,这些操作是在一个C#执行方法中的,所以涉及到数据库的事务,在Dapper中应该如何处理呢?

方案一

Dapper 对数据库操作的事务代码:

using System.Transactions;

....

using (var transactionScope = new TransactionScope())

{

DoYourDapperWork();

transactionScope.Complete();

}

方案二using (var connection = GetOpenConnection())

using (var transaction = connection.BeginTransaction())

{

connection.Execute(

"INSERT INTO data(Foo, Bar) values (@Foo, @Bar);", listOf5000Items, transaction);

transaction.Commit();

}

方案三using System.Transactions;

// 确保数据库连接已打开

using (var transactionScope = new TransactionScope())

{

try

{

long result = _sqlConnection.ExecuteScalar(sqlString, new {Param1 = 1, Param2 = "string"});

transactionScope.Complete();

}

catch (Exception exception)

{

// 记录错误日志

_logger.Error(exception, $"Error encountered whilst executing SQL: {sqlString}, Message: {exception.Message}")

// 重新抛出异常

throw;

}

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐