附加一个ID /标签到LINQ to SQL生成的代码?

问题描述:

我感兴趣的是将由LINQ to SQL进行的数据库调用追溯到生成调用的.NET代码。例如,DBA可能会担心特定的缓存执行计划效果不佳。例如,如果一个DBA要告诉开发商,以解决下面的代码...附加一个ID /标签到LINQ to 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”类,但这只是一个开始。随着一个大型应用程序,这可能很快变得难以管理。

有没有办法将标识或标签附加到由LINQ to SQL生成和执行的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”ID /标签结束于自动生成的SQL中,我将被设置。谢谢。

没有公共的方法来修改LINQ to SQL生成的底层SQL来实现这样的标记工具。您可以通过用一些调用堆栈信息写出文本日志文件来实现Log属性,以显示哪些方法生成了哪些SQL语句以供参考。

你看过捕获带有DataContext.Log属性的T-SQL吗?如果你能够把它变成一个也有你的标签属性的对象,你可能能够编目你的应用程序执行的SQL。