检查针对SQL Server数据库的LINQ查询
有没有办法在.NET中查看我们正在触发的针对数据库的LINQ查询? 例如。 我正在LINQ中查询一下,我希望看到SQL查询正在触发与数据库进行通信。
是否有任何Visual Studio窗口或任何其他方式?
你在找这样的东西吗?
var context = new MyContext(); context.Database.Log = s => Debug.WriteLine(s);
然后每当执行查询时,您将看到如下输出:
var customers = context.Customers.ToList();
在30-3-2015 13:48:03 +02:00打开连接
SELECT [Extent1]。[Guid] AS [Guid],
[Extent1]。[FirstName] AS [FirstName],
[Extent1]。[LastName] AS [LastName],
[Extent1]。[电子邮件] AS [电子邮件],
[Extent1]。[已创建] AS [已创建]
FROM [dbo]。[客户] AS [Extent1]– 执行时间为30-3-2015 13:48:03 +02:00
– 在0 ms内完成,结果为:SqlDataReader
关闭连接时间为30-3-2015 13:48:03 +02:00
如果您有一个DbContext,您可以在其上触发LINQ查询,您只需将DbContext.Database.Log
属性设置为如下所示:
yourContext.Database.Log = (msg => System.Diagnostics.Debug.Write(msg, "SQL"));
在此之后,每个SQL查询都显示在Visual Studio的调试控制台中,类型为SQL。
您可以使用SQL事件探查器查看LINQ表达式如何转换为SQL语句。
您可以使用DataContext对象的Log属性。 此外,它取决于您使用的应用程序类型。
对于Web应用程序: –
db.Log = Response.Output;
对于控制台应用: –
db.Log = Console.Out;
除此之外,您还可以使用DataContext
类的GetCommand方法。 Sql Server Profiler
再次显而易见。
您还可以使用SQL Server Profiler,跟踪或扩展事件。 前两个已弃用。
https://technet.microsoft.com/en-us/library/bb630354(v=sql.105).aspx
https://msdn.microsoft.com/en-us/library/ms181091.aspx
https://technet.microsoft.com/en-us/library/ms191006(v=sql.105).aspx