小编典典

使用TransactionScope的缺点需要新

sql

我想了解TransactionScopeOption.RequiresNewEntityFramework带有Sql Server
2008
)上使用的权衡/缺点,为什么我们不应该RequiresNew始终使用的原因是什么?

问候。


阅读 251

收藏
2021-03-17

共1个答案

小编典典

您应该使用RequirednotRequiresNew。RequiresNew意味着每个操作都将使用一个新的事务,即使已经包含一个已经存在的事务范围。这肯定会导致僵局。即使Required存在另一个严重的问题TransactionScope,即默认情况下Serializable它也会创建一个事务,这是一个非常糟糕的选择,并且是死锁地狱的又一捷径,而且没有可扩展性。请参阅使用认为有害的新TransactionScope()。您应该始终在TransactionOption将隔离级别显式设置为的情况下创建事务作用域,该隔离级别ReadCommitted要更为合理得多:

using(TransactionScope scope = new TransactionScope(
    TransactionScopeOption.Required,
    new TransactionOptions {
       IsolationLevel = IsolationLevel.ReadCommitted}))
{
   /// do work here
   ...
   scope.Complete();
}
2021-03-17