Запись информации из SQL, сгенерированного Linq-to-sql - PullRequest
2 голосов
/ 05 января 2012

Из каждого предложения sql, сгенерированного (и выполненного успешно) linq, мне нужно знать следующую информацию:

  • реальное предложение SQL со значениями параметров
  • дата начала исполнения
  • дата окончания исполнения
  • количество возвращаемых записей (если есть выборка)

Кто-нибудь знает, как получить эту информацию?

1 Ответ

2 голосов
/ 05 января 2012

Сгенерированный запрос SQL можно получить из свойства Log контекста данных: Примером будет:

db.Log = Console.Out;
IQueryable<Customer> custQuery =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

foreach(Customer custObj in custQuery)
{
    Console.WriteLine(custObj.CustomerID);
}

Для начала и конца выполнения я не думаю, что вы могли бы сделать это специально с linq. Вы можете использовать класс Stopwatch для измерения времени, но при этом также будет рассчитываться время, необходимое среде выполнения .NET для генерации SQL из дерева выражений из интерфейса IQueryable, который представляет ваша инструкция linq to sql.

В простом SQL есть несколько способов узнать время выполнения запроса:

  • с использованием средства профилирования сервера SQL
  • с использованием сценария SQL с параметрами @StartTime и @EndTime

    DECLARE @StartTime datetime,@EndTime datetime    
    SELECT @StartTime=GETDATE()    
    -- your query    
    SELECT @EndTime=GETDATE()    
    SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in microseconds]
    
  • с использованием сценария SQL с SET STATISTICS TIME (Transact-SQL)

    SET STATISTICS TIME ON
    GO  
    -- your query  
    SET STATISTICS TIME OFF  
    GO
    

Что касается количества затронутых рядов, вы также можете попробовать несколько подходов. Вы можете:

  • попробуйте DataContext.GetChangeSet, это должно вернуть счетчик обновлений с:

    dataContext.GetChangeSet().Updates.Count
    
  • попытаться вернуть @@ROWCOUNT

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...