System.Transactions.TransactionScope
和EF6和有什么不一样Database.BeginTransaction
?
有人可以举一个很小的例子,或者只是解释一个明显的区别时使用哪个?
PS:在我的项目中,我正在使用EF6。我已经阅读了文档,但并没有太大帮助。还查看了示例,但它们正在使用SqlConnection.BeginTransaction
,现在MSDatabase.BeginTransaction
在EF6中引入了此新功能。
Answers:
我在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
db操作和C#代码混合使用。
对于仍然喜欢此TransactionScope
方法的用户,建议他们检查其局限性,尤其是在云方案中(云方案不支持分布式事务)。
可以在这里找到更多信息