如何知道哪个LINQ语句在运行时生成了SQL或者有没有一种方法可以将一个唯一的字符串注入到每个LINQ语句中

8ehkhllq  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(100)

我正在编写一个使用EntityFramework 6.4.4版本的ASP.NET应用程序。我在调试导致错误的Linq语句时遇到问题。我希望能够看到由Linq语句生成的C#方法,但我不知道哪个方法生成了哪个LINQ语句。
我从Stack Overflow中复制了扩展方法供您参考。
代码示例:

public List<EmployeeClone> GetAllEmployees()
    {
        var context = new TryDbContext();
        List<Employee> employees = context.Employees.SetQueryName().ToList();
        
        return employees;
    }

public static class ExtensionMethods
{
    public static IQueryable<T> SetQueryName<T>(this IQueryable<T> source,
      [CallerMemberName] String name = null,
      [CallerFilePath] String sourceFilePath = "",
      [CallerLineNumber] Int32 sourceLineNumber = 0)
    {
        var expr = Expression.NotEqual(Expression.Constant("Query name: " + name), Expression.Constant(null));
        var param = Expression.Parameter(typeof(T), "param");
        var criteria1 = Expression.Lambda<Func<T, Boolean>>(expr, param);

        expr = Expression.NotEqual(Expression.Constant($"Source: {sourceFilePath} ({sourceLineNumber})"), Expression.Constant(null));
        var criteria2 = Expression.Lambda<Func<T, Boolean>>(expr, param);
        Console.WriteLine($"{criteria1.Body} && {criteria2.Body}");
        return source.Where(criteria1).Where(criteria2);
    }
}

基本上,每当我调用context.employees实体或当前dbcontext中使用的所有实体时,我都希望执行此扩展方法。这将帮助我在SQL服务器上哪个方法生成无用的LINQ语句,然后对该方法采取适当的操作。我想在context.entity请求时调用该扩展方法。

List<Employee> employees = context.Employees.SetQueryName().ToList();
zaq34kh6

zaq34kh61#

我已经找到了问题的部分解决办法,但我原来的问题仍然悬而未决。我正在尝试覆盖所有实体的TagWithCallSite方法。我已经找到了一种针对特定实体类型执行此操作的方法,但我不确定如何针对所有实体类型执行此操作。它还登录了sql server事件探查器。

下面是我为特定实体类型重写TagWithCallSite方法的代码:

internal class Program
{
    static void Main(string[] args)
    {
        var context = new TryDbContext();

        var employees = context.Employees.TagWithCallSite().ToList();

        foreach (var employee in employees)
        {
            Console.WriteLine(employee.Name);
        }

        Console.ReadLine();
    }
}

相关问题