如何使用布尔变量切换EntityFramework Tracker

时间:2018-06-26 13:51:57

标签: c# entity-framework linq

我需要与代码相关的帮助。目前,我正在使用布尔变量打开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();
    }
}

1 个答案:

答案 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();
    }
}