Как отследить запрос 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)?
Это по-прежнему позволяет вам видеть выполненные запросы, и вы можете ограничить его записью только вашей машины...