So zeigen Sie SQL an, das von Entity Framework Core IQueryable generiert wurde
Frage:
In Entity Framework Core, wie greifen Sie auf den von einem IQueryable-Objekt generierten SQL-Code zu? Die in früheren Versionen verfügbare ToTraceString()-Methode ist in EF Core nicht vorhanden.
Antwort:
EF Core 5/6 / Net 5/ 6
Für EF Core 5 und 6 mit .NET 5 und 6 können Sie ToQueryString() verwenden Methode:
var query = _context.Widgets.Where(w => w.IsReal && w.Id == 42); var sql = query.ToQueryString();
Für ältere Versionen von .NET Core kann eine Erweiterungsmethode verwendet werden:
Core 2.1.2
public static string ToSql<TEntity>(this IQueryable<TEntity> query) { // Reflection and casting voodoo to get EF internal classes var sql = ...; return sql; }
EF Core 3.0
public static string ToSql<TEntity>(this IQueryable<TEntity> query) { using (var enumerator = query.Provider.Execute<IEnumerable<TEntity>>(query.Expression).GetEnumerator()) { // More reflection and casting voodoo var sql = ...; return sql; } }
EF Core 3.1
public static string ToSql<TEntity>(this IQueryable<TEntity> query) where TEntity : class { using (var enumerator = query.Provider.Execute<IEnumerable<TEntity>>(query.Expression).GetEnumerator()) { // Even more reflection and casting voodoo var sql = ...; return sql; } }
Hinweis:
Für EF Core-Versionen vor 5 ist Reflektion erforderlich, um das von einem IQueryable generierte SQL abzurufen.
Das obige ist der detaillierte Inhalt vonWie kann ich das von Entity Framework Core IQueryable generierte SQL anzeigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!