Как отследить запрос linq при использовании PredicateBuilder/AsExpandable?

Я использую PredicateBuilder, что означает, что я использую метод расширения AsExpandable. Проблема заключается в том, что я больше не могу отслеживать мои запросы SQL, так как при попытке привести запрос к ObjectQuery возникает следующая ошибка, чтобы я мог выполнить для него вызов ObjectQuery.ToTraceString()...

Невозможно привести объект типа 'LinqKit.ExpandableQuery`1[Genesis.Person]' к типу System.Data.Objects.ObjectQuery.

Есть идеи?

3 ответа

Решение

Я бы порекомендовал запустить Dump() для вашего запроса в LINQPad и использовать вкладку SQL, чтобы увидеть, какой SQL был сгенерирован. Сделайте это, подключите LINQPad к контексту Entity Framework, нажмите F4, чтобы включить ссылку на LinqKit.dll, и LinqKit в качестве импорта пространства имен. Дайте мне знать, если вам нужно дополнительное руководство, как это сделать.

Используйте следующий универсальный PredicateBuilder вместо LinqKit:

http://petemontgomery.wordpress.com/2011/02/10/a-universal-predicatebuilder/

Тогда ObjectQuery.ToTraceString() будет работать как положено.

Я не знаком с вашей конкретной проблемой, но вы не можете вместо этого запустить трассировку на сервере SQL (например, с помощью профилировщика, предполагающего MSSQL)?

Это по-прежнему позволяет вам видеть выполненные запросы, и вы можете ограничить его записью только вашей машины...

Другие вопросы по тегам