Сведения о вопросе

krutoi

22:44, 24th August, 2020

Теги

asp.net   linq-to-sql    

Как отслеживать запросы на Linq-to-sql DataContext

Просмотров: 596   Ответов: 4

В подкасте herding code 14 кто-то упоминает, что stackoverflow отображает запросы, которые были выполнены во время запроса в нижней части страницы.

По-моему, это отличная идея. Каждый раз, когда страница загружается, я хочу знать, какие операторы sql выполняются, а также подсчет общего числа DB поездок туда и обратно. Есть ли у кого-нибудь аккуратное решение этой проблемы?

Как вы думаете, какое количество запросов является приемлемым? Я думал, что во время разработки мое приложение может выдать исключение, если для отображения страницы требуется более 30 запросов.

EDIT: мне кажется, я не совсем ясно объяснил свой вопрос. Во время запроса HTTP веб-приложение может выполнить десяток или более операторов sql. Я хочу, чтобы эти утверждения были приложены к нижней части страницы вместе с подсчетом количества утверждений.

ВОТ МОЕ РЕШЕНИЕ:

Я создал класс TextWriter, в который может записываться DataContext:

public class Logger : StreamWriter
    {
        public string Buffer { get; private set; }
        public int QueryCounter { get; private set; }

        public Logger() : base(new MemoryStream())
        {}

        public override void Write(string value)
        {
            Buffer += value + "<br/><br/>";
            if (!value.StartsWith("--")) QueryCounter++;
        }

        public override void WriteLine(string value)
        {
            Buffer += value + "<br/><br/>";
            if (!value.StartsWith("--")) QueryCounter++;
        }
    }

В конструкторе DataContext я настроил регистратор:

public HeraldDBDataContext()
        : base(ConfigurationManager.ConnectionStrings["Herald"].ConnectionString, mappingSource)
    {
        Log = new Logger();
    }

Наконец, я использую событие Application_OnEndRequest , чтобы добавить результаты в нижнюю часть страницы:

protected void Application_OnEndRequest(Object sender, EventArgs e)
    {
        Logger logger = DataContextFactory.Context.Log as Logger;
        Response.Write("Query count : " + logger.QueryCounter);
        Response.Write("<br/><br/>");
        Response.Write(logger.Buffer);
    }



  Сведения об ответе

SSESION

05:31, 12th August, 2020

Если ты поставишь .ToString() к переменной запроса var вы получаете sql. Вы можете laso использовать это в Debug en VS2008. Отладка Визуализатора

экс:

var query = from p in db.Table
            select p;

MessageBox.SHow(query.ToString());


  Сведения об ответе

DO__IT

19:32, 16th August, 2020

System.IO.StreamWriter httpResponseStreamWriter = 
new StreamWriter(HttpContext.Current.Response.OutputStream);

dataContext.Log = httpResponseStreamWriter;

Вставьте это в свою страницу, и вы получите SQL, выброшенный на страницу. Очевидно, я бы завернул это в небольшой метод, который вы можете enable/disable.


  Сведения об ответе

appple

18:34, 13th August, 2020

У меня есть запись в моем блоге, которая охватывает отправку в Файлы журнала, память, окно отладки или несколько писателей .


  Сведения об ответе

baggs

21:06, 1st October, 2020

От Linq в действии

Microsoft имеет инструмент визуализации запросов, который можно загрузить отдельно от VS 2008. он находится на отметке http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться