c# - Database.BeginTransaction 与 Transactions.TransactionScope

标签 c# entity-framework transactions entity-framework-6 transactionscope

<分区>

System.Transactions.TransactionScope 和 EF6 的 Database.BeginTransaction 有什么区别?

谁能举个小例子,或者只是解释一下在有明显区别的情况下使用哪一个?

P.S:在我的项目中,我使用的是 EF6。我已经阅读了文档,但没有太大帮助。还查看了示例,但他们宁愿使用 SqlConnection.BeginTransaction,现在 MS 在 EF6 中引入了这个新的 Database.BeginTransaction

最佳答案

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

随着 EF6 的引入,Microsoft 推荐使用新的 API 方法:Database.BeginTransaction()Database.UseTransaction()。尽管 System.Transactions.TransactionScope 仍然得到很好的支持,但对于大多数 EF6 用户而言,它不再是必需

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

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

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

更多信息可以在here中找到

关于c# - Database.BeginTransaction 与 Transactions.TransactionScope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22382892/

相关文章:

c# - ASP.NET MVC Razor : How to render a Razor Partial View's HTML inside the controller action

c# - Wcf 服务和 Xamarin PCL : data security

java - hibernate 、Wildfly、JNDI 配置 : Cannot commit during a managed transaction

sql - node.js + postgres 数据库事务管理

c# - EF DateTimes 与 SQL Server 中保存的值不匹配

mysql - Codeigniter:mysql 事务和 affected_rows

c# - Linq DELETE 在 SQL Server 中生成 UPDATE 查询

c# - Redis ID :xyz is a set of all keys in urn:xyz - no grooming

c# - Entity Framework 为我使用变量的每个地方创建一个新列

entity-framework - 我们如何从 Telerik Open Access 切换到其他任何东西?