我需要与代码相关的帮助。目前,我正在使用布尔变量打开Tracking和NoTracking。想检查是否有更好的方法编写此代码:
private Task<TEntity> GetWithOrWithoutTracking(Expression<Func<TEntity, bool>>
predicate, bool isTracked = false)
{
if (isTracked)
return _dbSet.Where(predicate).AsTracking()
.FirstOrDefaultAsync();
else
return _dbSet.Where(predicate).AsNoTracking()
.FirstOrDefaultAsync();
}
}
答案 0 :(得分:4)
在您的示例中,我没有看到太多错误(除非其他示例不是超级有用),但是出于可重用性的考虑,您可以使用扩展方法。
public static class QueryableExtensions
{
public static IQueryable<T> AsMaybeTracking<T>(this IQueryable<T> source, bool isTracked = false) where T : class
{
return isTracked ? source.AsTracking() : source.AsNoTracking();
}
}