J'ai une requête que je passe byte[]
en tant que paramètre. J'essaie d'extraire la requête SQL et de l'exécuter dans Studio de gestion pour déboguer. Comment puis-je en extraire l'instruction SQL?
committeeMember =
db.Committee_Member.FirstOrDefault(x => x.Customer_Number == activity.Contact.Number
&& x.Position_Start_Date.Value.Year == activity.EndDate
&& x.Committee_Id == activity.Committee.Id && x.Cancelled != 1);
Dans le débogueur, passez la souris sur la variable commiteeMember
pour afficher la requête SQL générée:
C'est ce que ToString()
renvoie pour une requête. Vous pouvez obtenir la même requête SQL générée manuellement en appelant ToString:
string sql = committeeMember.ToString();
Cette méthode surchargée appelle en interne ObjectQuery.ToTraceString()
qui renvoie des commandes qui seront exécutées sur une source de données.
Vous pouvez également utiliser SQL Profiler ou Entity Framework Profiler pour voir quelle requête SQL a été exécutée.
Incidemment, LINQ to SQL n'est pas une structure d'entité. Si c'est le cas, vous pouvez définir [yourDataContext].Log = Console.Out
(ou n autre rédacteur de flux ) et obtenir la requête.
Dans votre requête, pensez à l'écrire comme suit pour pouvoir exécuter l'astuce ToString
:
var committeeMemberQuery =
db.Committee_Member.*WHERE*
(x =>
x.Customer_Number == activity.Contact.Number
&& x.Position_Start_Date.Value.Year == activity.EndDate
&& x.Committee_Id == activity.Committee.Id && x.Cancelled != 1
);
var committeeMember = committeeMemberQuery.FirstOrDefault();
Vous pouvez maintenant faire committeeMemberQuery.ToString()
mais vous n'obtiendrez pas d'informations sur les paramètres (vous obtiendrez DataContext.Log = Console.Out
mais là encore, ce n'est pas Entity Framework, c'est LINQ to SQL.