#c# #linq
#c# #linq
Вопрос:
Как я могу узнать, когда моя программа выполняет выражение linq, какой sql-запрос был выполнен?
Ответ №1:
Профилирование — это верный способ. В зависимости от поставщика LINQ это также может быть встроено, например, с помощью LINQ-to-SQL вы можете назначить что угодно .Log
, и он будет записывать запросы по мере их выполнения. На самом простом уровне:
dataContext.Log = Console.Out; // for a LINQ-to-SQL DataContext
// TODO: now execute some queries against dataContext
Внутри мы используем пользовательский ADO.NET стек для этого (и некоторых других вещей). Это выглядит как SqlConnection
(и LINQ-to-SQL этим вполне доволен), но он выполняет для нас протоколирование и профилирование для каждой выполняемой команды, чтобы мы могли видеть, где находятся наши длительные операции. Я думаю, Sam хочет сделать это доступным для общественности, если вы хотите.
Комментарии:
1. Я использую ef? И я не могу найти свойство log. вы можете меня направить?
2. @LightWing — EF не является LINQ-to-SQL, поэтому нет . Свойство журнала. Однако, я подозреваю, что наш ADO.NET перехват будет работать нормально. Я проверил, и мы действительно планируем сделать это доступным в ближайшее время, но оно не будет протестировано на EF, просто потому, что мы не используем EF. Вы также могли бы рассмотреть возможность использования инструмента Ayende: efprof.com
Ответ №2:
Профилирование базы данных сделало бы это. Имейте в виду, что оператор не будет выполнен для базы данных, пока ваш код не отправится запрашивать результаты запроса.
Комментарии:
1. А если у меня нет доступа к базе данных?
2. Для этого решения требуется, чтобы у вас был доступ к базе данных.
3. Есть ли какое-либо другое решение?
Ответ №3:
Вы пробовали LINQPad?
Я полагаю, что это показывает SQL-прототип вашего запроса.
Комментарии:
1. Да, у меня есть linqpad и linqer.
2. @LightWing — И после того, как вы ввели в него свой LINQ-запрос, вы смотрели на вкладку SQL ниже?
Ответ №4:
- вы можете использовать SQL Profiler, поставляемый вместе с установкой SQL Server, и записывать инструкции по мере их выполнения
- вы можете использовать такой инструмент, как LINQPad, и запустить LINQ в вашем хранилище данных и изучить SQL в инструменте
- вы можете отладить свое приложение и получить SQL из
ObjectQuery.ToTraceString
метода
Ответ №5:
var res = somequery;
Console.WriteLine(res);
Комментарии:
1. В настоящее время я ищу книгу, из которой я это прочитал. Но пока, да, я так думаю, поскольку он использовался в консоли. WriteLine