将ID /标签添加到LINQ to SQL生成的代码?

时间:2020-03-06 14:24:48  来源:igfitidea点击:

我对将LINQ对SQL的数据库调用追溯到生成该调用的.NET代码感兴趣。例如,DBA可能担心某个特定的缓存执行计划的执行不佳。例如,如果DBA告诉开发人员解决以下代码...

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"类,但这只是一个开始。对于大型应用程序,这可能很快变得难以管理。

有没有一种方法可以将ID或者标签添加到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中,则会被设置。谢谢。

解决方案

我们是否看过使用DataContext.Log属性捕获T-SQL?如果我们可以将其保存到还具有tag属性的对象中,则可以对应用程序执行的SQL进行分类。

没有公开的方法可以修改LINQ to SQL生成的底层SQL来实现这种标记功能。我们可以通过以下方式实现Log属性:它写出带有一些调用堆栈信息的文本日志文件,以显示哪些方法生成了哪些SQL语句以供参考。