Прикрепление идентификатора / метки LINQ к сгенерированному SQL коду?

StackOverflow https://stackoverflow.com/questions/99827

  •  01-07-2019
  •  | 
  •  

Вопрос

Я заинтересован в отслеживании вызовов базы данных, выполняемых LINQ в SQL, обратно в .СЕТЕВОЙ код, который сгенерировал вызов.Например, администратор базы данных может быть обеспокоен тем, что конкретный кэшированный план выполнения работает плохо.Если бы, например, администратор базы данных сказал разработчику обратиться к следующему коду...

exec sp_executesql N'SELECT [t0].[CustomerID]
FROM [dbo].[Customers] AS [t0]
WHERE [t0].[ContactName] LIKE @p0
ORDER BY [t0].[CompanyName]',
'N'@p0 nvarchar(2)',@p0=N'c%'

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

Есть ли способ прикрепить идентификатор или метку к SQL-коду, сгенерированному и выполняемому LINQ to SQL?Размышляя вслух, вот функция расширения под названием "TagWith", которая концептуально иллюстрирует то, что мне интересно делать.

var customers = from c in context.Customers
                where c.CompanyName.StartsWith("c")
                orderby c.CompanyName
                select c.CustomerID;

foreach (var CustomerID in customers.TagWith("CustomerList4"))
{
    Console.WriteLine(CustomerID);
}

Если идентификатор / метка "CustomerList4" заканчивается в автоматически сгенерированном SQL, я был бы настроен.Спасибо.

Это было полезно?

Решение

Не существует общедоступного способа изменить базовый SQL, который генерирует LINQ to SQL для реализации такого средства тегирования.Вы могли бы реализовать свойство Log таким образом, чтобы оно записывало текстовый файл журнала с некоторой информацией о стеке вызовов, чтобы показать, какие методы сгенерировали какие операторы SQL для ссылки.

Другие советы

Вы смотрели на захват T-SQL с помощью свойства DataContext.Log?Если бы вы смогли преобразовать его в объект, у которого также было ваше свойство tag, вы могли бы каталогизировать SQL, выполняемый вашим приложением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top