Отладка операторов Entity Framework SQL - PullRequest
11 голосов
/ 26 октября 2011

У меня странное время отклика при использовании Entity Framework для связи SQL.

Это с моего веб-хоста:

enter image description here

Это с моего локального сервера:

enter image description here

Это увеличение времени ответа, о котором я беспокоюсь.Я сузил проблему до одной строки в коде Nop.Data> EfRepository.cs> public void Insert (T entity)> _entities.Add (entity);Да, я знаю, что это очень специфично для NopCommerce, но суть в том, что я ищу ее за помощью в том, как отладить это.

Есть ли какие-нибудь события, которые я могу отловить, которые отображают выполняемый SQL?Или что еще я могу сделать, чтобы узнать больше о том, что на самом деле происходит в Entity Framework в этой команде:

Ответы [ 2 ]

21 голосов
/ 26 октября 2011

Для отладки EF-запросов проще всего привести запрос к ObjectQuery и использовать ToTraceString:

var query = myContext.MyTable
    .Where(r => r.Id == searchId)
    .Select(r => r);

Console.WriteLine(((ObjectQuery)query).ToTraceString());

Это покажет базовый SQL для запроса, и вы можете запустить запросы вручную для отладки.почему они медленныеВот ссылка MSDN:

http://msdn.microsoft.com/en-us/library/system.data.objects.objectquery.totracestring.aspx

Если вы пытаетесь получить SQL, который запускается при вызове SaveChanges () в вашем контексте, это не так просто.Вы можете взглянуть на EFTracingProvider:

http://blogs.msdn.com/b/jkowalski/archive/2009/06/11/tracing-and-caching-in-entity-framework-available-on-msdn-code-gallery.aspx

Или, если вы используете SQL Server, вы можете перейти непосредственно к SQL Profiler и перехватить операторы T-SQL (это мое предпочтение)подход).

9 голосов
/ 24 апреля 2015

В EF6 вы также можете сделать это в конструкторе вашего dbcontext

Пример

public BookServiceContext() : base("name=BookServiceContext")
{
    // New code:
    this.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
}

Это будет записывать в консоль каждый SQL-запрос, который генерирует EF. См. Эту статью для получения дополнительной информации http://blog.oneunicorn.com/2013/05/08/ef6-sql-logging-part-1-simple-logging/

...