Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Dapper哪个事务更好:BEGIN TRAN还是TransactionScope?_C#_Tsql_Transactions_Dapper - Fatal编程技术网

C# 使用Dapper哪个事务更好:BEGIN TRAN还是TransactionScope?

C# 使用Dapper哪个事务更好:BEGIN TRAN还是TransactionScope?,c#,tsql,transactions,dapper,C#,Tsql,Transactions,Dapper,我刚刚开始使用Dapper,我想知道哪种交易模式更好 编写SQL时,我更喜欢使用脚本中已有的事务: BEGIN TRAN -- insert, update etc. COMMIT 因为它更容易测试,但也存在使用.net事务的地方的问题,所以现在我不确定应该实际使用哪一个 这两种方法比另一种方法有什么缺点/优点吗?实际上,这与整洁无关。参考答案 TransactionScope或连接。BeginTransaction或“存储过程中的事务”决策超出了Dapper的范围。Dapper只是在AD

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

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

BEGIN TRAN

-- insert, update etc.

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


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

实际上,这与整洁无关。参考答案

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

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

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

  • “存储过程中的事务”是针对存储过程中的单个数据库实现的,而不是在应用程序代码中实现

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

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