Как извлечь команду Sql из скомпилированного запроса Linq - PullRequest
2 голосов
/ 12 ноября 2009

В обычных (не скомпилированных) запросах Linq to Sql вы можете извлечь SQLCommand из IQueryable с помощью следующего кода:

SqlCommand cmd = (SqlCommand)table.Context.GetCommand(query);

Можно ли сделать то же самое для скомпилированного запроса?

Следующий код предоставляет мне делегата для скомпилированного запроса:

        private static readonly Func<Data.DAL.Context, string, IQueryable<Word>> Query_Get =
        CompiledQuery.Compile<Data.DAL.Context, string, IQueryable<Word>>(
            (context, name) =>
                from r in context.GetTable<Word>()
                where r.Name == name
                select r); 

Когда я использую это, чтобы сгенерировать IQueryable и попытаться извлечь SqlCommand, он, похоже, не работает. При отладке кода я вижу, что возвращенный SqlCommand имеет «очень» полезный CommandText из SELECT NULL AS [EMPTY] '

        using (var db = new Data.DAL.Context())
        {
            IQueryable<Word> query = Query_Get(db, "word");
            SqlCommand cmd = (SqlCommand)db.GetCommand(query);
            Console.WriteLine(cmd != null ? cmd.CommandText : "Command Not Found");
        }

Я не могу найти в Google ничего об этом конкретном сценарии, так как, без сомнения, это не обычное дело ...

Итак .... Есть мысли?

Ответы [ 2 ]

1 голос
/ 14 ноября 2009

Вы можете использовать журнал DataContext:

db.Log = Console.Out; 
0 голосов
/ 12 ноября 2009

Должен быть выход из .NET, но вы можете профилировать свою базу данных SQL Server и фиксировать отправленный ей SQL. Вы можете сделать это из SQL Management Studio.

...