Linq to Entities: см. Итоговый запрос (context.Log = Console.Out) - PullRequest
5 голосов
/ 12 февраля 2011

Я только что понял, что если ваше приложение C # использует классы LINQ-TO-SQL для взаимодействия с базой данных, вы можете запросить вот так

        using (DatabaseContext context = new DatabaseContext())
        {
            context.Log = Console.Out;
            var query = from Person p in context.People
                        where person.Name == "john"
                        select p;                                
            Console.WriteLine(query.Name);
        }

Что является эквивалентом в LINQ-TO-ENTITY (это другое название для ADO.NET?) Для
context.Log = Console.Out
Или есть другой способ увидеть ваш фактический запрос SQL к базе данных?

Ответы [ 5 ]

9 голосов
/ 12 февраля 2011

Я всегда использую SQL Profiler, если у вас есть MS SQL Server. Для какой СУБД это? LINQ 2 Entities поддерживает несколько типов БД.

Это тоже работает ...

var cust = (from c in context.Customers select c);

string sql = ((ObjectQuery)cust).ToTraceString();

Из форумов MSDN

2 голосов
/ 15 мая 2015

Используя EntityFrame 6, можно просто выполнить ToString () по вашему запросу, по крайней мере, при использовании MySQL

var cust = (from c in context.Customers select c);
string sql = cust.ToString();

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

0 голосов
/ 13 августа 2013

EF не имеет прямой параллели с потоковой регистрацией, которую использует LINQ to SQL.Есть несколько вариантов профилирования, доступных для различных затрат.Я обсуждал некоторые из этих вариантов на http://www.thinqlinq.com/Post.aspx/Title/LINQ-to-Database-Performance-hints. Вы можете найти список этих профилировщиков и других инструментов LINQ на http://www.thinqlinq.com/Post.aspx/Title/linq-tools.

0 голосов
/ 27 августа 2012

Я считаю, что протокол табличного потока данных ( TDS ), используемый Microsoft SQL Server, отправляет команды и ответы в виде простого текста по умолчанию, поэтому, если вы не зашифруете соединение между вашим SQL Server и клиентом, вы должен иметь возможность просматривать запрос и ответ с помощью комплексного анализатора пакетов .

Это займет некоторую работу, но использование перехватчика пакетов таким способом позволит вам увидеть, на какой T-SQL переводится ваш LINQ.

Примечания стороны :

  1. Я рекомендую вам зашифровать все соединения между вашим клиентом и сервером SQL, если только клиент и сервер не находятся на одной машине, и вы не проводите разработка тестирование.
  2. Если вы не можете рисковать использованием дешифрованного соединения в целях тестирования, ваш анализатор пакетов может иметь плагин, который позволит вам расшифровать зашифрованный трафик, но я не уверен, есть ли какие-либо риски в используя такой плагин для расшифровки.
0 голосов
/ 12 февраля 2011

Вы можете отслеживать ваш SQL при использовании Linq2Entities https://stackoverflow.com/questions/137712/sql-tracing-linq-to-entities

Вы также можете посмотреть на этот инструмент Huagati Query Profiler

...