0

我有兴趣将 LINQ to 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 语句产生了调用。当然,您可以在自动生成的数据上下文中搜索“客户”类,但这只是一个开始。对于大型应用程序,这可能很快变得难以管理。

有没有办法将 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 中,我将被设置。谢谢。

4

2 回答 2

1

您是否查看过使用 DataContext.Log 属性捕获 T-SQL?如果您能够将它捕获到一个也具有您的 tag 属性的对象中,您可能能够对您的应用程序执行的 SQL 进行编目。

于 2008-09-19T05:38:12.180 回答
1

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

于 2008-09-19T16:30:00.090 回答