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

Sig*_*die 5 c# linq entity-framework

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

ESG*_*ESG 9

我在您的示例中没有看到太多错误(除了 else 不是超级有用),但为了可重用性,您可以使用扩展方法。

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();
    }
}
Run Code Online (Sandbox Code Playgroud)