检查针对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再次显而易见。