Database.BeginTransaction与Transactions.TransactionScope


87

System.Transactions.TransactionScope和EF6和有什么不一样Database.BeginTransaction

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

PS:在我的项目中,我正在使用EF6。我已经阅读了文档,但并没有太大帮助。还查看了示例,但它们正在使用SqlConnection.BeginTransaction,现在MSDatabase.BeginTransaction在EF6中引入了此新功能。

Answers:


97

我在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.TransactionScopedb操作和C#代码混合使用。

对于仍然喜欢此TransactionScope方法的用户,建议他们检查其局限性,尤其是在云方案中(云方案不支持分布式事务)。

可以在这里找到更多信息


11
不幸的是,您不能使用Database.BeginTransaction嵌套事务,而可以使用TransactionScope。
Triynko

8
“普通的C#代码”也可以交易的是什么意思?
杰拉德(Gerard)

@Gerard我认为这意味着,如果您在EF之外执行SQL操作(例如使用ADO.NET),则这些操作也将在同一事务下进行。
Rudey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.