Fla*_*air 77 c# entity-framework transactions transactionscope entity-framework-6
System.Transactions.TransactionScope
和EF6有什么区别Database.BeginTransaction
?
有人可以给出一个小例子,或者只是解释哪一个有明显区别?
PS:在我的项目中,我使用的是EF6.我已经阅读了文档,但它没有多大帮助.还查看了这些示例,但它们正在使用SqlConnection.BeginTransaction
,现在MS已经Database.BeginTransaction
在EF6中引入了这个新功能.
Fla*_*air 87
我在Entity Framework 6的文档中找到了答案:
随着EF6的推出,Microsoft建议使用新的API方法:Database.BeginTransaction()
和Database.UseTransaction()
.尽管System.Transactions.TransactionScope
仍然得到很好的支持,但大多数EF6用户不再需要它.
虽然Database.BeginTransaction()
仅用于与数据库相关的操作事务,System.Transactions.TransactionScope
但除此之外,"普通C#代码"也可以是事务性的.
因此,Database.BeginTransaction()
在EF6中的事务中只使用db相关操作,否则System.Transactions.TransactionScope
用于在事务中将db操作和C#代码混合在一起.
对于那些仍然喜欢这种TransactionScope
方法的人,建议他们检查一下它的局限性,特别是在云场景中(云场景不支持分布式事务).
更多信息可以在这里找到
Bor*_*ode 10
公认的流行答案具有误导性。这两个Database.BeginTransaction()
和System.Transactions.TransactionScope
是DB操作。
using scope = new TransactionScope
和结束scope.Complete();
来包装所有事务操作以进行提交。sqlCommand.Transaction = sqlTxn;
和显式设置事务context.Database.UseTransaction(sqlTxn);
MSDN 确实声明,使用新的 Database.BeginTransaction() 和 Database.UseTransaction() API,大多数用户不再需要 TransactionScope 方法。
TransactionScope 的缺点:
TransactionScope 的优点:
基于这篇 MSDN 文章。
归档时间: |
|
查看次数: |
25381 次 |
最近记录: |