我想了解TransactionScopeOption.RequiresNew在 EntityFramework ( 带有Sql Server 2008 )上使用的权衡/缺点,为什么我们不应该RequiresNew始终使用的原因是什么?
TransactionScopeOption.RequiresNew
RequiresNew
问候。
您应该使用RequirednotRequiresNew。RequiresNew意味着每个操作都将使用一个新的事务,即使已经包含一个已经存在的事务范围。这肯定会导致僵局。即使Required存在另一个严重的问题TransactionScope,即默认情况下Serializable它也会创建一个事务,这是一个非常糟糕的选择,并且是死锁地狱的又一捷径,而且没有可扩展性。请参阅使用认为有害的新TransactionScope()。您应该始终在TransactionOption将隔离级别显式设置为的情况下创建事务作用域,该隔离级别ReadCommitted要更为合理得多:
Required
TransactionScope
Serializable
TransactionOption
ReadCommitted
using(TransactionScope scope = new TransactionScope( TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted})) { /// do work here ... scope.Complete(); }