Как мне узнать фактический SQL, который генерирует этот оператор? - PullRequest
4 голосов
/ 12 октября 2010

Я использую VS2010, .NET4 и EF4.Я хотел бы видеть фактический SQL, который генерируется при запуске.Кроме того, что это лучший способ написать это утверждение?

Вот мой код:

var cklContactItems = from a in dbTestCenterViews.appvuChecklistExports
                                   where a.MarketChecklistID == MCLID 
                                        && a.checklistSectionID == SID 
                                        && a.fieldGroupOrder != null
                                   orderby a.fieldGroupOrder ascending
                                   select new { a.Column1, a.Column2, a.Column3, a.Column4, a.Column5,a.Column1FieldID,a.Column2FieldID,a.Column3FieldID,a.Column4FieldID,a.Column5FieldID,a.fieldGroupOrderLabel };

Ответы [ 4 ]

12 голосов
/ 12 октября 2010
var query = (from x in context.MyEntity where x... select x);

(query as ObjectQuery<MyEntity>).ToTraceString();

Это будет печатать в журнале трассировки ... если вы хотите простой просмотрщик трассировки (вне Visual Studio), посмотрите DebugView

И в качестве дополнительного примечаниялучший из профилировщиков «реального времени», который я использовал / видел, это Entity Framework Profiler , вы должны заплатить за него, но есть пробная версия, и она даст вам SQL, соответствующийстрока кода.Это также признает общие "проблемы".Установка очень проста ... все, что вам нужно добавить, это один оператор в инициализаторе вашего приложения.


** Редактирование обновлено, чтобы показать, как это сделать с кодом пользователя **

Думаю, я могу сделать всю тяжелую работу за тебя ...;).Поскольку вы используете раздражающий тип, просто пропустите часть <T>.

var cklContactItems = from a in dbTestCenterViews.appvuChecklistExports
                               where a.MarketChecklistID == MCLID 
                                    && a.checklistSectionID == SID 
                                    && a.fieldGroupOrder != null
                               orderby a.fieldGroupOrder ascending
                               select new {
                                   a.Column1, 
                                   a.Column2, 
                                   a.Column3, 
                                   a.Column4,
                                   a.Column5,
                                   a.Column1FieldID,
                                   a.Column2FieldID,
                                   a.Column3FieldID,
                                   a.Column4FieldID,
                                   a.Column5FieldID,
                                   a.fieldGroupOrderLabel 
                                  };

System.Diagnostics.Trace.WriteLine((query as ObjectQuery).ToTraceString());
4 голосов
/ 12 октября 2010

Вы можете использовать SQL Server Profiler . LinqPad , и я уверен, что есть другие инструменты

1 голос
/ 12 октября 2010

Вы используете VS10, и для этого есть инструмент под названием Intellitrace .

1 голос
/ 12 октября 2010

Выполнить SQL Profiler

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...