Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关键词';使用';除非条件成立_C#_Dry - Fatal编程技术网

C# 关键词';使用';除非条件成立

C# 关键词';使用';除非条件成立,c#,dry,C#,Dry,我正在使用.NET的类

我正在使用.NET的类
进行编码,在这个特定的方法中,我只希望重新实例化
实例(如果它尚未实例化)。下面是一个与一些实体框架方法一起完成的示例

if (Transaction.Current != null)
{
    using (var transaction = CreateTransaction())
    {
        _dbSet.Attach(item);
        _dbSet.Remove(item);
        _context.SaveChanges();
        transaction.Complete();
    }
}
else
{
    _dbSet.Attach(item);
    _dbSet.Remove(item);
    _context.SaveChanges();
}

我想知道如果上述条件成立,是否有更聪明的方法只使用
using
-行。我不喜欢重复相同的代码两次。

如果已有事务范围,为什么不在现有事务范围内创建一个新的事务范围呢

但是如果一个新的事务没有意义,最好的方法是返回一个虚拟的
IDisposable

// Check if a transaction already exists. if one doesn't create one for
// the purpose of the following changes
Transaction transaction = Transaction.Current == null
  ? CreateTransaction()
  : null;

// changes
_dbSet.Attach(item);
_dbSet.Remove(item);
_context.SaveChanges();

// if we did end up creating one, let's clean up after it.
if (transaction != null)
{
    transaction.Complete();
    transaction.Dispose();
}

大概是这样吧?(虽然这对于CodeReview来说可能是一个更好的问题)

从技术上讲,您可以编写类似的内容(因为如果
事务
null
,则使用
不会导致自动处置,请参阅):

(我不确定检查结果。在原始代码
Transaction.Current!=null
,但是
Transaction.Current==null
看起来更符合逻辑。)

<>但是我只想分组

_dbSet.Attach(item);
_dbSet.Remove(item);
_context.SaveChanges();
你的意思是说如果(Transaction.Current==null)
(而不是
!=
)则
_dbSet.Attach(item);
_dbSet.Remove(item);
_context.SaveChanges();