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中找到