На многих сайтах/блогах я заметил, что люди, которые хотят объяснить механизм linq, записывают запросы Linq и предоставляют для этого перевод SQL. Как я могу получить перевод для своих собственных запросов? Я работаю с EF .Net 4.0 в VS2010. Есть ли место (свойство или даже какой-то сторонний инструмент), где я могу видеть, на что они переведены?Как узнать, что EF переводит запросы Linq?
ответ
Самый простой способ - использовать SQL Profiler. Я нашел это настоящим богом-отправкой, когда дело доходит до отладки.
Спасибо, это то, что я искал, но у меня только экспресс-выпуск MSSQL, поэтому мне пришлось бы играть с еще более сложными установщиками версии скрипты, чтобы получить профилировщик, поэтому я просто передаю сейчас, когда я спешу. – user1086396
Вы можете использовать ObjectQuery.ToTraceString метод:
var query = ...
string sql = ((System.Data.Objects.ObjectQuery)query).ToTraceString();
Однако некоторые недостатки этого подхода заключается в том, что он будет показывать только запросы, а не обновления/вставки/удаления. Кроме того, он не будет раскрывать используемые параметры.
Если вам нужно как можно больше деталей из запроса, используйте Profiler SQL Server как Neil suggested.
У Джулии Лерман есть хорошая статья с различными вариантами на MSDN: Profiling Database Activity in the Entity Framework. Она упоминает:
- ObjectQuery.ToTraceString метод
- Visual Studio 2010 Ultimate в IntelliTrace
- EFTracingProvider
Да, это действительно ограничено и не позволяет переводить много запросов, которые мне бы хотелось, спасибо, однако :) – user1086396
Вы можете использовать LinqPad, вы можете запросить модель лица и просмотреть сгенерированный SQL.
Не прямой ответ, но вы должны посмотреть на [EFProf] (http://efprof.com/). Да, это коммерческий инструмент, но человек это потрясающе. (Есть бесплатные способы сделать это, например, SQL Profiler) – vcsjones
Это именно то, что я искал! Спасибо, он отлично работает, и я доволен 30-дневной пробной версией :) – user1086396