C# 根据SQL Server数据库检查LINQ查询

C# 根据SQL Server数据库检查LINQ查询,c#,asp.net,sql-server,linq,entity-framework,C#,Asp.net,Sql Server,Linq,Entity Framework,有没有办法在.NET中查看我们对数据库进行的LINQ查询?例如,我正在LINQ中编写一个查询,我想看看SQL查询触发了什么来与数据库通信 是否有任何Visual Studio窗口或其他方式?如果您有一个DbContext,您可以在其上启动LINQ查询,只需将DbContext.Database.Log属性设置为类似以下内容: yourContext.Database.Log = (msg => System.Diagnostics.Debug.Write(msg, "SQL")); 在此

有没有办法在.NET中查看我们对数据库进行的LINQ查询?例如,我正在LINQ中编写一个查询,我想看看SQL查询触发了什么来与数据库通信


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

如果您有一个DbContext,您可以在其上启动LINQ查询,只需将DbContext.Database.Log属性设置为类似以下内容:

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

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

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

您是否正在寻找类似

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

var customers = context.Customers.ToList();
2015年3月30日13:48:03+02:00打开的连接

挑选 [Extent1].[Guid]作为[Guid], [Extent1]。[FirstName]作为[FirstName], [Extent1].[LastName]作为[LastName], [Extent1].[Email]作为[Email], [Extent1].[Created]为[Created] 来自[dbo].[Customer]作为[Extent1]

-于2015年3月30日13:48:03+02:00执行

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

2015年3月30日13:48:03+02:00时的闭合连接


您还可以使用SQL Server事件探查器、跟踪或扩展事件。前两个已弃用

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

对于Web应用程序:-

db.Log = Response.Output;
db.Log = Console.Out;
对于控制台应用程序:-

db.Log = Response.Output;
db.Log = Console.Out;

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

您使用哪种RDBMS?如果您使用的是MSSQL,请使用Sql Profiler。我正在使用SQL RDBMSSQL RDBMS?这是Microsoft、Oracle、MySQL、Postgre还是…?MSSQL,这是Microsoft,无论使用哪种类型的数据库,这都有效。我必须在哪里写这行代码,特别是在某个类中,或者在每个要检查的类中?@Parveen您需要将它附加到您实例化的每个上下文中。将记录该上下文执行的所有查询。我在答案中添加了上下文声明行。希望获得此帮助以及需要在控制台或输出窗口中检查输出的位置?@Parveen是的,结果将写入输出窗口,从“显示输出自”列表中选择“调试”。无论使用哪种类型的数据库,此操作都有效。问题是,还是其他方式。所以这个答案是合理的。你好,唐纳。。。