Cara Melihat SQL Dijana oleh Entiti Rangka Kerja Teras IQueryable
Soalan:
Dalam Entiti Teras Rangka Kerja, bagaimana anda mengakses kod SQL yang dihasilkan oleh objek IQueryable? Kaedah ToTraceString(), tersedia dalam versi terdahulu, tidak terdapat dalam EF Core.
Jawapan:
EF Core 5/6 / Net 5/ 6
Untuk EF Core 5 dan 6 dengan .NET 5 dan 6, anda boleh menggunakan Kaedah ToQueryString():
var query = _context.Widgets.Where(w => w.IsReal && w.Id == 42); var sql = query.ToQueryString();
Untuk versi .NET Core yang lebih lama, kaedah sambungan boleh digunakan:
Teras 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; }
Teras EF 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; } }
Nota:
Untuk versi EF Core sebelumnya hingga 5, refleksi diperlukan untuk mendapatkan semula SQL yang dijana oleh IQueryable.
Atas ialah kandungan terperinci Bagaimanakah Saya Melihat SQL Dijana oleh Rangka Kerja Entiti Teras IQueryable?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!