C# 关键词';使用';除非条件成立
我正在使用.NET的类C# 关键词';使用';除非条件成立,c#,dry,C#,Dry,我正在使用.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();