Профилирование запросов LINQ и их планов выполнения особенно важно из-за сумасшедшего SQL, который иногда можно создать.
Я часто нахожу, что мне нужно отследить определенный запрос, и мне трудно найти его в анализаторе запросов. Я часто делаю это в базе данных, в которой много запущенных транзакций (иногда на производственном сервере), поэтому просто открывать Profiler не годится.
Я также обнаружил, что пытаюсь использовать DataContext для отслеживания неадекватности, поскольку он не дает мне SQL, который я на самом деле могу выполнить сам.
Моя лучшая стратегия на данный момент - добавить случайное число в мой запрос и отфильтровать его в трассировке.
LINQ:
where o.CompletedOrderID != "59872547981"
Фильтр профилировщика:
'TextData' like '%59872547981'
Это прекрасно работает с парой предостережений:
- Я должен быть осторожен, чтобы не забыть удалить критерии или выбрать что-то, что не сильно повлияет на план запроса. Да, я знаю, оставляя это, мы просим о неприятностях.
- Насколько я могу судить, даже при таком подходе мне нужно запускать новую трассировку для каждого запроса LINQ, который мне нужно отслеживать. Если перейти к «Файл> Свойства» для существующей трассировки, я не могу изменить критерии фильтра.
Вы не можете просто выполнить запрос в своем приложении и увидеть его всплывающим в Профилировщике без каких-либо дополнительных усилий. Просто надеялся, что кто-то другой придумал лучший способ, чем этот, или, по крайней мере, предложил менее «опасный» токен для поиска, чем запрос по столбцу.