将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语句以供参考。