首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Database.BeginTransaction vs Transactions.TransactionScope

Database.BeginTransaction vs Transactions.TransactionScope
EN

Stack Overflow用户
提问于 2014-03-13 23:09:39
回答 2查看 34.7K关注 0票数 100

System.Transactions.TransactionScope和ef6的Database.BeginTransaction有什么不同?

有没有人可以举一个小例子,或者只是解释一下,当有明显的区别时,应该使用哪一个?

附言:在我的项目中,我使用的是EF6。我已经阅读了文档,但它没有太大帮助。我也查找了示例,但他们使用的是SqlConnection.BeginTransaction,现在微软在EF6中引入了这个新的Database.BeginTransaction

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-14 21:17:45

我在Entity Framework6的文档中找到了答案:

随着EF6的引入,微软建议使用新的API方法:Database.BeginTransaction()Database.UseTransaction()。尽管System.Transactions.TransactionScope仍然得到了很好的支持,但对于大多数EF6用户来说,它不再是必要的。

虽然Database.BeginTransaction()仅用于与数据库相关的操作事务,但System.Transactions.TransactionScope使“纯C#代码”也可以是事务性的。

因此,如果在EF6事务中只执行与数据库相关的操作,则应使用Database.BeginTransaction(),否则应使用System.Transactions.TransactionScope在事务中混合使用数据库操作和C#代码。

对于那些仍然喜欢TransactionScope方法的人,建议他们检查一下它的局限性,特别是在云场景中(云场景不支持分布式事务)。

欲了解更多信息,请登陆网站:here

票数 105
EN

Stack Overflow用户

发布于 2021-01-17 19:48:55

被接受和流行的答案是误导的。Database.BeginTransaction()System.Transactions.TransactionScope都用于DB操作。

Database.BeginTransaction()和System.Transactions.TransactionScope之间的主要区别:

风格

  • 使用TransactionScope可以在后台隐式设置事务(通过使用要提交的起始using scope = new TransactionScope和结束scope.Complete();包装所有事务性操作。
  • 使用Database.BeginTransaction通过编写sqlCommand.Transaction = sqlTxn;context.Database.UseTransaction(sqlTxn);

显式设置事务

分布式事务

  • TransactionScope支持分布式事务(单个事务中涉及多个数据库)和非分布式transactions.
  • Database.BeginTransaction仅支持非分布式事务(所有操作都在单个数据库中完成的本地事务)。

MSDN声明,有了新的Database.BeginTransaction()和Database.UseTransaction() API,大多数用户不再需要TransactionScope方法。

TransactionScope的优点和缺点:

TransactionScope的缺点:

  • 需要.NET 4.5.1或更高版本才能使用异步方法。
  • 它不能在云方案中使用,除非您确保有且只有一个连接(云方案不支持分布式DDL不能与前面部分的Database.UseTransaction()方法结合使用。
  • 如果您发出任何DDL并且没有通过MSDTC服务启用分布式事务,它将引发异常。

TransactionScope的优势:

如果您与给定数据库建立了多个连接,或者在同一事务中将一个到一个数据库的连接与一个到另一个数据库的连接组合在一起(注意:您必须将

  • 服务配置为允许分布式事务工作),它会自动将本地事务升级为分布式事务。
  • 易于编码。如果您希望事务是环境事务,并且在后台隐式处理,而不是在您的控制下显式处理,那么TransactionScope方法可能更适合您。

基于this MSDN article

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22382892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档