Меня интересует отслеживание вызовов базы данных, сделанных LINQ to SQL, к .NET-коду, который сгенерировал этот вызов. Например, администратор базы данных может быть обеспокоен тем, что определенный план выполнения в кэше работает плохо. Если, например, администратор базы данных скажет разработчику обратиться к следующему коду ...
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 произвел вызов. Конечно, вы можете искать через класс «Клиенты» в автоматически сгенерированном контексте данных, но это было бы только начало. С большим приложением это может быстро стать неуправляемым.
Есть ли способ прикрепить идентификатор или метку к коду 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, я бы установил. Спасибо.