【问题标题】:Cannot get to SQL generated in EF Core无法访问 EF Core 中生成的 SQL
【发布时间】:2021-10-05 09:05:08
【问题描述】:

我有一个非常烦人的问题,我无法访问 EF Core 生成的 SQL

我已经尝试过 Azure Data Studio,它会分析一些正在运行的命令,但不会分析来自我的应用程序的命令

大量网站对用户说 query.ToQueryString() 但这不存在

我的变量是 IQueryable 类型的

请问我该怎么做?

我使用的是 EF Core 3.1

干杯

保罗

【问题讨论】:

    标签: azure entity-framework-core ef-core-3.1


    【解决方案1】:

    ToQueryString() 已添加到 EF Core 5.0。

    在3.1中,你可以打开EF Core logging查看执行的SQL命令。

    或者您可以使用以下自定义扩展方法(并在切换到 EF Core 5.0 或更高版本时将其删除):

    using System.Collections;
    using System.Linq;
    using System.Reflection;
    
    namespace Microsoft.EntityFrameworkCore
    {
        using Query;
        using Query.Internal;
    
        public static partial class EfCoreExtensions
        {
            public static string ToQueryString<TEntity>(this IQueryable<TEntity> query)
            {
                var enumerable = query.Provider.Execute<IEnumerable>(query.Expression);
                var enumerableType = enumerable.GetType();
                var relationalQueryContextField = enumerableType.GetField("_relationalQueryContext", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
                var relationalQueryContext = (RelationalQueryContext)relationalQueryContextField.GetValue(enumerable);
                var relationalCommandCacheField = enumerableType.GetField("_relationalCommandCache", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
                var relationalCommandCache = (RelationalCommandCache)relationalCommandCacheField.GetValue(enumerable);
                var relationalCommand = relationalCommandCache.GetRelationalCommand(relationalQueryContext.ParameterValues);
                return relationalCommand.CommandText;
            }
        }
    }
    

    【讨论】:

    • 非常感谢,这很好用。稍微调整一下要求,有没有办法在调试场景中,我可以针对我的数据库的所有查询运行它?
    • 这仅用于调试。对于上述场景,请使用第一个选项(EF Core 日志记录) - 只需按照链接中的说明进行操作。它可以配置为将日志输出到控制台、调试窗口等。
    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 2023-01-10
    • 2020-02-18
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多