c# - Dapper : BEGIN TRAN or TransactionScope? 哪个交易更好

标签 c# tsql transactions dapper

我刚开始使用 Dapper,我想知道哪种交易模式会更好。

当我编写 SQL 时,我更喜欢使用脚本中已有的事务:

BEGIN TRAN

-- insert, update etc.

COMMIT

因为它更容易测试但也有问题 transaction with dapper dot net 使用 .net 事务的地方,所以现在我不确定我应该实际使用哪一个。

这两种方法相对于另一种方法有什么缺点/优点吗?

最佳答案

其实这与Dapper无关。引用this回答。

TransactionScopeconnection.BeginTransaction 或“存储过程中的事务”决策超出了 Dapper 的范围。 Dapper 只是在 ADO.NET 的 DBConnection 对象上公开了一些扩展方法,这些方法将查询的输出映射到对象。休息由您决定。

  1. TransactionScope 一般用于分布式事务;跨越不同数据库的事务可能在不同的系统上。这需要在操作系统和 SQL Server 上进行一些配置,否则将无法运行。如果您的所有查询都针对单个数据库实例,则不建议这样做。
    正如@ImrePühvel 在评论中指出的那样:对于单个数据库,当您需要将代码包含在不受您控制的事务中时,这可能很有用。单数据库,也不需要特殊配置。

  2. connection.BeginTransaction 是针对单个数据库实现事务(在 C#、VB.NET 等中)的 ADO.NET 语法。这不适用于多个数据库。

  3. “存储过程中的事务”是在存储过程中针对单个数据库实现的,而不是在应用程序代码中执行此操作。

嵌套事务或上述类型的组合是另一个讨论主题;尝试在网上搜索这个。

我个人的意见是使用 UnitOfWork 以更好的方式处理事务。我已经在上面的链接中提到了细节。它在内部使用 connection.BeginTransaction

关于c# - Dapper : BEGIN TRAN or TransactionScope? 哪个交易更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44118876/

相关文章:

c# - 使用共享词典是解决缺少 "extension properties"的好方法吗?

c# - Unity 中的多个触发器

sql-server - 将 OPENJSON 应用于单个列

java - 带有@Transactional 注释的多个事务管理器

android - 无法解析 recyclerView.adapter 中的 getActivity()

c# - 使用 Async Await 是否可以避免线程耗尽?

c# - Windows Phone 8.1 操作事件不触发

sql - TSQL RAND() 问题

sql - 违反唯一约束后事务仍然提交

transactions - SSIS TransactionOption Required 导致错误(全部在本地机器上)