有没有办法在.NET中查看我们正在触发的针对数据库的LINQ查询?例如。我正在LINQ中查询,我想看看SQL查询正在触发与数据库进行通信。
是否有任何Visual Studio窗口或其他任何方式?
答案 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)
您还可以使用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
答案 4 :(得分:3)
您可以使用DataContext对象的Log属性。此外,它取决于您使用的应用程序类型。
对于Web应用程序: -
db.Log = Response.Output;
对于控制台应用程序: -
db.Log = Console.Out;
除此之外,您还可以使用DataContext
类的GetCommand方法。 Sql Server Profiler
也是一个明显的选择。