检查针对SQL Server数据库的LINQ查询

时间:2015-03-30 11:30:39

标签: c# asp.net sql-server linq entity-framework

有没有办法在.NET中查看我们正在触发的针对数据库的LINQ查询?例如。我正在LINQ中查询,我想看看SQL查询正在触发与数据库进行通信。

是否有任何Visual Studio窗口或其他任何方式?

5 个答案:

答案 0 :(得分:11)

您是否正在寻找this

之类的内容
var context = new MyContext();
context.Database.Log = s => Debug.WriteLine(s);

然后,无论何时执行查询,您都会看到如下输出:

var customers = context.Customers.ToList();
  

于30-3-2015 13:48:03 +02:00开启连接

     

选择       [Extent1]。[Guid] AS [Guid],
      [Extent1]。[FirstName] AS [FirstName],
      [Extent1]。[LastName] AS [LastName],
      [Extent1]。[Email] AS [Email],
      [Extent1]。[Created] AS [Created]
      来自[dbo]。[客户] AS [Extent1]

     

- 执行时间为30-3-2015 13:48:03 +02:00

     

- 在0 ms内完成,结果为:SqlDataReader

     

于30-3-2015 13:48:03 +02:00

关闭连接

答案 1 :(得分:5)

如果您有一个DbContext,您可以在其上触发LINQ查询,只需将DbContext.Database.Log属性设置为如下所示:

yourContext.Database.Log = (msg => System.Diagnostics.Debug.Write(msg, "SQL"));

在此之后,每个SQL查询都会在Visual Studio的调试控制台中显示,类别为SQL。

答案 2 :(得分:4)

您可以使用SQL事件探查器查看LINQ表达式如何转换为SQL语句。

答案 3 :(得分:3)

答案 4 :(得分:3)

您可以使用DataContext对象的Log属性。此外,它取决于您使用的应用程序类型。

对于Web应用程序: -

db.Log = Response.Output;

对于控制台应用程序: -

db.Log = Console.Out;

除此之外,您还可以使用DataContext类的GetCommand方法。 Sql Server Profiler也是一个明显的选择。