Comment afficher le SQL généré par Entity Framework Core IQueryable
Question :
Dans l'entité Framework Core, comment accéder au code SQL généré par un objet IQueryable ? La méthode ToTraceString(), disponible dans les versions précédentes, n'est pas présente dans EF Core.
Réponse :
EF Core 5/6 / Net 5/ 6
Pour EF Core 5 et 6 avec .NET 5 et 6, vous pouvez utiliser le Méthode ToQueryString() :
var query = _context.Widgets.Where(w => w.IsReal && w.Id == 42); var sql = query.ToQueryString();
Pour les anciennes versions de .NET Core, une méthode d'extension peut être utilisée :
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; } }
Remarque :
Pour les versions EF Core antérieures à 5, une réflexion est nécessaire pour récupérer le SQL généré par un IQueryable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!