Comment afficher les instructions SQL générées par LINQ?

Comment est-il fait en utilisant la méthode ObjectQuery?

Vous pouvez toujours attacher quelque chose à la propriété .Log de votre DataContext. Cela montrera toutes les commandes SQL telles qu’elles sont envoyées.

Je le fais dans ma base pour les objects d’access aux données et les envoie à la console de débogage Visual Studio. Au fur et à mesure que les objects créent leur DataContext, je le vérifie pour voir si leur débogage et attache une classe auxiliaire TextWritter comme ceci:

dbDataContext _dB = new dbDataContext(); _dB.CommandTimeout = 5000; #if DEBUG _dB.Log = new DebugTextWriter(); #endif 

Voici l’object d’assistance pour la sortie de la console de débogage:

 //utility class for output of TextWriter for the Visual Sudio Debug window class DebugTextWriter : System.IO.TextWriter { public override void Write(char[] buffer, int index, int count) { System.Diagnostics.Debug.Write(new Ssortingng(buffer, index, count)); } public override void Write(ssortingng value) { System.Diagnostics.Debug.Write(value); } public override Encoding Encoding { get { return System.Text.Encoding.Default; } } } 

Voici ce que j’ai trouvé en utilisant la méthode ObjectQuery. En utilisant la console pour tester, vous pouvez effectuer les opérations suivantes:

Créez une méthode d’extension comme ci-dessous, puis appelez-la. Dites produit produit, puis SQL imprime en tant que product.ToTraceSsortingng.

 public static class MyExtensions { public static ssortingng ToTraceSsortingng(this IQueryable t) { ssortingng sql = ""; ObjectQuery oqt = t as ObjectQuery; if (oqt != null) sql = oqt.ToTraceSsortingng(); return sql; } } 

Vous pouvez utiliser LINQPad pour cela.

  var q = from img in context.Images ... select img; ssortingng sql = q.ToSsortingng(); 

sql contiendra la requête sql select.

EDIT: désavantage: les parameters n’auront aucune valeur pour le moment

Vous pouvez consulter le visualiseur de débogage Linq-to-SQL ou simplement passer votre souris sur votre requête Linq-to-SQL (l’info-bulle doit afficher le code SQL généré) ou accéder à:

 context.GetCommand(query).CommandText 

Vous pouvez exécuter SQL Server Profiler.

C’est ce que j’utilise lors de la configuration du contexte de la firebase database:

 this.DbContext.Database.Log += s => Debug.WriteLine(s); 

juste une petite mise à jour, vous pouvez maintenant utiliser une action pour enregistrer le SQL:

 // test SQL logger Action SQLLogger = (message) => System.Diagnostics.Debug.Write(message); _dB.Context().Database.Log = SQLLogger;