System.Transactions.TransactionScope
和ef6的Database.BeginTransaction
有什么不同?
有没有人可以举一个小例子,或者只是解释一下,当有明显的区别时,应该使用哪一个?
附言:在我的项目中,我使用的是EF6。我已经阅读了文档,但它没有太大帮助。我也查找了示例,但他们使用的是SqlConnection.BeginTransaction
,现在微软在EF6中引入了这个新的Database.BeginTransaction
。
发布于 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。
发布于 2021-01-17 19:48:55
被接受和流行的答案是误导的。Database.BeginTransaction()
和System.Transactions.TransactionScope
都用于DB操作。
Database.BeginTransaction()和System.Transactions.TransactionScope之间的主要区别:
风格
using scope = new TransactionScope
和结束scope.Complete();
包装所有事务性操作。sqlCommand.Transaction = sqlTxn;
和context.Database.UseTransaction(sqlTxn);
显式设置事务
分布式事务
MSDN声明,有了新的Database.BeginTransaction()和Database.UseTransaction() API,大多数用户不再需要TransactionScope方法。
TransactionScope的优点和缺点:
TransactionScope的缺点:
TransactionScope的优势:
如果您与给定数据库建立了多个连接,或者在同一事务中将一个到一个数据库的连接与一个到另一个数据库的连接组合在一起(注意:您必须将
https://stackoverflow.com/questions/22382892
复制相似问题