Как это делается с помощью метода ObjectQuery?
Как просмотреть LINQ Сгенерированные операторы SQL?
Ответ 1
Вот что я нашел, используя метод ObjectQuery. Используя консоль для тестирования, вы можете сделать следующее:
Создайте метод расширения, как показано ниже, затем вызовите его. Произнесите продукт продукта, затем SQL распечатает его как product.ToTraceString.
public static class MyExtensions
{
public static string ToTraceString<T>(this IQueryable<T> t)
{
string sql = "";
ObjectQuery<T> oqt = t as ObjectQuery<T>;
if (oqt != null)
sql = oqt.ToTraceString();
return sql;
}
}
Ответ 2
Вы всегда можете прикрепить что-то к свойству .Log вашего DataContext. Это покажет все команды SQL по мере их отправки.
Я делаю это в своей базе для объектов доступа к данным и вывожу их в консоль отладки Visual Studio. Поскольку объекты создают свой DataContext, я проверяю, проверяет ли его отладку и присоединяет вспомогательный класс TextWritter следующим образом:
dbDataContext _dB = new dbDataContext();
_dB.CommandTimeout = 5000;
#if DEBUG
_dB.Log = new DebugTextWriter();
#endif
Вот вспомогательный объект для вывода на консоль отладки:
//utility class for output of TextWriter for the Visual Sudio Debug window
class DebugTextWriter : System.IO.TextWriter
{
public override void Write(char[] buffer, int index, int count)
{
System.Diagnostics.Debug.Write(new String(buffer, index, count));
}
public override void Write(string value)
{
System.Diagnostics.Debug.Write(value);
}
public override Encoding Encoding
{
get { return System.Text.Encoding.Default; }
}
}
Ответ 3
Вы можете использовать LINQPad для этого.
Ответ 4
Вы могли бы взглянуть на Linq-to-SQL Debug Visualizer или просто навести указатель мыши на ваш запрос Linq-to-SQL (подсказка должна показывать сгенерированный SQL) или доступ:
context.GetCommand(query).CommandText
Ответ 5
var q = from img in context.Images
...
select img;
string sql = q.ToString();
sql
будет содержать запрос выбора sql.
Параметры EDIT: недостаток: в настоящее время не будут иметь никаких значений
Ответ 6
Вы можете запустить профилировщик SQL Server.
Ответ 7
просто небольшое обновление теперь вы можете использовать действие для регистрации SQL:
// test SQL logger
Action<string> SQLLogger = (message) => System.Diagnostics.Debug.Write(message);
_dB.Context().Database.Log = SQLLogger;