Heim >Backend-Entwicklung >C++ >Wie kann ich das von Entity Framework Core IQueryable generierte SQL anzeigen?

Wie kann ich das von Entity Framework Core IQueryable generierte SQL anzeigen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-03 06:15:39229Durchsuche

How Do I View the SQL Generated by Entity Framework Core IQueryable?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn