[EF] Подсмотреть генерируемый SQL
От: Ilinichev  
Дата: 19.06.13 12:39
Оценка: :)
Такой вот mix из Linq-to-Entities и Linq-to-Objects. Как сделать сабж на VS2010?

using (var entities = new Entities(dbFolder.EfConnStr))
{
    var objItems = new string[] { "a1", "a2", "a3", "a4" };

    var query = from obi in objItems
                where !entities.DbItems.Any(dbi => obi == dbi.Name)
                select obi;

    // Облом
    var sql = ((ObjectQuery)query).ToTraceString(); 
}
Re: [EF] Подсмотреть генерируемый SQL
От: Doc Россия http://andrey.moveax.ru
Дата: 19.06.13 15:47
Оценка:
Здравствуйте, Ilinichev, Вы писали:

I>Такой вот mix из Linq-to-Entities и Linq-to-Objects. Как сделать сабж на VS2010?


1) Для ASP.NET есть http://miniprofiler.com/
2) Для остального есть профайлеры SQL
Re[2]: [EF] Подсмотреть генерируемый SQL
От: Ilinichev  
Дата: 19.06.13 17:03
Оценка:
Здравствуйте, Doc, Вы писали:

I>>Такой вот mix из Linq-to-Entities и Linq-to-Objects. Как сделать сабж на VS2010?


Doc>1) Для ASP.NET есть http://miniprofiler.com/

Doc>2) Для остального есть профайлеры SQL

Не нашел подходящего ничего для SQL Server Express 2008
Re[3]: [EF] Подсмотреть генерируемый SQL
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 19.06.13 17:05
Оценка:
Здравствуйте, Ilinichev, Вы писали:

I>Не нашел подходящего ничего для SQL Server Express 2008


DataWizard SQL Performance Profiler
HgLab: Mercurial Server and Repository Management for Windows
Re: [EF] Подсмотреть генерируемый SQL
От: TK Лес кывт.рф
Дата: 19.06.13 17:33
Оценка:
Здравствуйте, Ilinichev, Вы писали:

I>Такой вот mix из Linq-to-Entities и Linq-to-Objects. Как сделать сабж на VS2010?


У вас выборка идет из массива. Откуда тут будут Entities и Sql?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: [EF] Подсмотреть генерируемый SQL
От: Ilinichev  
Дата: 19.06.13 20:56
Оценка:
Здравствуйте, TK, Вы писали:

I>>Такой вот mix из Linq-to-Entities и Linq-to-Objects. Как сделать сабж на VS2010?

TK>У вас выборка идет из массива. Откуда тут будут Entities и Sql?

Да, я понимаю это Но можно как-нибудь вывернуть это наизнанку, перехватить генерацию SQL EF-контекстом или еще каким-нибудь другим образом на стороне программы, а не на стороне SQL-сервера посмотреть, что будет запрашиваться при помощи SQL?

Кстати, по ходу вопрос, материализация при таком использовании EF-контекста (в предикатах Linq-to-Objects) происходит вообще?
Re[4]: [EF] Подсмотреть генерируемый SQL
От: Ilinichev  
Дата: 19.06.13 21:00
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

I>>Не нашел подходящего ничего для SQL Server Express 2008

Н>DataWizard SQL Performance Profiler

Эх, хорошая, наверное, штука. Всего $5, опять же. А трайала нет.
А со стороны программы, а не со стороны sql БД, можно как-нибудь увидеть вышеуказанный SQL? Проанализировать, что LINQ там вообще такое вытворяет?
Re[3]: [EF] Подсмотреть генерируемый SQL
От: TK Лес кывт.рф
Дата: 19.06.13 21:05
Оценка: 2 (1)
Здравствуйте, Ilinichev, Вы писали:

I>Да, я понимаю это Но можно как-нибудь вывернуть это наизнанку, перехватить генерацию SQL EF-контекстом или еще каким-нибудь другим образом на стороне программы, а не на стороне SQL-сервера посмотреть, что будет запрашиваться при помощи SQL?


На этапе откладки можно смотреть в IntelliTrace — там будет SQL отправляемый в БД

I>Кстати, по ходу вопрос, материализация при таком использовании EF-контекста (в предикатах Linq-to-Objects) происходит вообще?


entities.DbItems.Any(dbi => obi == dbi.Name) вот ваш запрос к БД. Должен вы полнится по числу элементов в objItems
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: [EF] Подсмотреть генерируемый SQL
От: Ilinichev  
Дата: 19.06.13 21:39
Оценка:
Здравствуйте, TK, Вы писали:

I>>Да, я понимаю это Но можно как-нибудь вывернуть это наизнанку, перехватить генерацию SQL EF-контекстом или еще каким-нибудь другим образом на стороне программы, а не на стороне SQL-сервера посмотреть, что будет запрашиваться при помощи SQL?


TK>На этапе откладки можно смотреть в IntelliTrace — там будет SQL отправляемый в БД


Все по чесноку. Студия тоже Express

здесь

IntelliTrace is available in Visual Studio 2010 Ultimate but not the lesser versions.


TK>entities.DbItems.Any(dbi => obi == dbi.Name) вот ваш запрос к БД. Должен вы полнится по числу элементов в objItems


А если так, то запрос к БД выполняется один раз, верно?
using (var entities = new Entities(dbFolder.EfConnStr))
{
    var objItems = new string[] { "a1", "a2", "a3", "a4" };

    var dbQuery = from dbi in entities.DbItems
                  where objItems.Contains(dbi.Name)
                  select dbi;

    var obQuery = from obi in objItems
                  join dbi in subQuery on obi equals dbi.Name
                  select obi;
}
Re[5]: [EF] Подсмотреть генерируемый SQL
От: Doc Россия http://andrey.moveax.ru
Дата: 20.06.13 01:04
Оценка: 2 (1)
Здравствуйте, Ilinichev, Вы писали:

I>А со стороны программы, а не со стороны sql БД, можно как-нибудь увидеть вышеуказанный SQL? Проанализировать, что LINQ там вообще такое вытворяет?


Вспомнил что еще вот такое видел, но в работе не проверял
http://visualstudiogallery.msdn.microsoft.com/269e6da9-7f4d-4650-a327-c70b359dcfe0
Re[6]: [EF] Подсмотреть генерируемый SQL
От: RushDevion Россия  
Дата: 20.06.13 04:33
Оценка: 2 (1)
Linq to Entity query visualizer
Entity Visualizer

Был еще какой-то посовременнее, название не помню. Погугли по ключевым словам EF Query Visualizer
Re: [EF] Подсмотреть генерируемый SQL
От: HowardLovekraft  
Дата: 20.06.13 05:45
Оценка: +1
Здравствуйте, Ilinichev, Вы писали:

I>Как сделать сабж на VS2010?


В DbContext API сгенерированный SQL вернет
query.ToString();

Но не факт, что то же самое работает и при использовании ObjectContext API.
Re[3]: [EF] Подсмотреть генерируемый SQL
От: Spinifex Россия https://architecture-cleaning.ru/
Дата: 21.06.13 03:58
Оценка:
Здравствуйте, Ilinichev, Вы писали:
http://expressprofiler.codeplex.com/
Re: [EF] Подсмотреть генерируемый SQL
От: -n1l-  
Дата: 21.06.13 09:04
Оценка:
Здравствуйте, Ilinichev, Вы писали:

I>Такой вот mix из Linq-to-Entities и Linq-to-Objects. Как сделать сабж на VS2010?


I>
I>using (var entities = new Entities(dbFolder.EfConnStr))
I>{
I>    var objItems = new string[] { "a1", "a2", "a3", "a4" };

I>    var query = from obi in objItems
I>                where !entities.DbItems.Any(dbi => obi == dbi.Name)
I>                select obi;

I>    // Облом
I>    var sql = ((ObjectQuery)query).ToTraceString(); 
I>}
I>


Если к SQL Server'у то можно в профайлере глянуть.
Или во время отладки там мелькют запросы с префиксом ado.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.