Nod*_*.JS 6 c# .net-core ef-core-3.0
我不知道发生了什么事:QueryModelGenerator,RelationalQueryModelVisitor和queryCompilationContext.CreateQuerymodelVisitor()一切似乎都烟消云散了。
我有以下代码,但我无法尝试将其从 2.2 转换为 .NET Core 3
public static string ToSql<TEntity>(this IQueryable<TEntity> query, DbContext dbCtx)
{
var modelGenerator = dbCtx.GetService<IQueryModelGenerator>();
var queryModel = modelGenerator.ParseQuery(query.Expression);
var databaseDependencies = dbCtx.GetService<DatabaseDependencies>();
var queryCompilationContext = databaseDependencies.QueryCompilationContextFactory.Create(false);
var modelVisitor = (RelationalQueryModelVisitor) queryCompilationContext.CreateQueryModelVisitor();
modelVisitor.CreateQueryExecutor<TEntity>(queryModel);
var sql = modelVisitor.Queries.FirstOrDefault()?.ToString();
return sql;
}
Run Code Online (Sandbox Code Playgroud)
Zie*_*ied 11
在 EF 3 中不再受支持。
现在怎么做
public static string ToSql<TEntity>(this IQueryable<TEntity> query)
{
var enumerator = query.Provider.Execute<IEnumerable<TEntity>>(query.Expression).GetEnumerator();
var enumeratorType = enumerator.GetType();
var selectFieldInfo = enumeratorType.GetField("_selectExpression", BindingFlags.NonPublic | BindingFlags.Instance) ?? throw new InvalidOperationException($"cannot find field _selectExpression on type {enumeratorType.Name}");
var sqlGeneratorFieldInfo = enumeratorType.GetField("_querySqlGeneratorFactory", BindingFlags.NonPublic | BindingFlags.Instance) ?? throw new InvalidOperationException($"cannot find field _querySqlGeneratorFactory on type {enumeratorType.Name}");
var selectExpression = selectFieldInfo.GetValue(enumerator) as SelectExpression ?? throw new InvalidOperationException($"could not get SelectExpression");
var factory = sqlGeneratorFieldInfo.GetValue(enumerator) as IQuerySqlGeneratorFactory ?? throw new InvalidOperationException($"could not get IQuerySqlGeneratorFactory");
var sqlGenerator = factory.Create();
var command = sqlGenerator.GetCommand(selectExpression);
var sql = command.CommandText;
return sql;
}
Run Code Online (Sandbox Code Playgroud)
在此处查看更多信息:https : //stackoverflow.com/a/51583047/196698 https://gist.github.com/rionmonster/2c59f449e67edf8cd6164e9fe66c545a#gistcomment-3059688
| 归档时间: |
|
| 查看次数: |
2340 次 |
| 最近记录: |