C# 如何使用布尔变量切换EntityFramework跟踪器

C# 如何使用布尔变量切换EntityFramework跟踪器,c#,entity-framework,linq,C#,Entity Framework,Linq,我需要代码相关的帮助。目前,我正在使用布尔变量启用跟踪和不跟踪。希望检查是否有更好的方法编写此代码: private Task<TEntity> GetWithOrWithoutTracking(Expression<Func<TEntity, bool>> predicate, bool isTracked = false) { if (isTracked) return _dbSet.Where(predicat

我需要代码相关的帮助。目前,我正在使用布尔变量启用跟踪和不跟踪。希望检查是否有更好的方法编写此代码:

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();
    }
}
private Task getwithout或without跟踪(表达式
谓词,bool isTracked=false)
{
如果(被追踪)
return _dbSet.Where(谓词).AsTracking()
.FirstOrDefaultAsync();
其他的
返回_dbSet.Where(谓词).AsNoTracking()
.FirstOrDefaultAsync();
}
}

我认为您的示例中没有太多错误(除了其他不太有用的错误),但出于可重用性的考虑,您可以使用扩展方法

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();
    }
}
公共静态类QueryableExtensions
{
公共静态IQueryable AsMaybeTracking(此IQueryable源,bool isTracked=false),其中T:class
{
return isTracked?source.AsTracking():source.AsNoTracking();
}
}