Подтвердить что ты не робот

Как просмотреть LINQ Сгенерированные операторы SQL?

Как это делается с помощью метода ObjectQuery?

4b9b3361

Ответ 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;