我有一个非常烦人的问题,我无法访问 EF Core 生成的 SQL
我已经尝试过 Azure Data Studio,它分析了正在运行的一些命令,但不是来自我的应用程序的命令
大量网站告诉用户 query.ToQueryString() 但这并不存在
我的变量是 IQueryable 类型
请问我该怎么做?
我使用的是 EF Core 3.1
干杯
保罗
答案 0 :(得分:0)
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;
}
}
}