C# Linq到实体:查看结果查询(context.Log=Console.Out)
我刚刚意识到,如果您的C#应用程序使用LINQ-TO-SQL类与数据库进行接口,您可以像这样执行查询C# Linq到实体:查看结果查询(context.Log=Console.Out),c#,linq,sql-server-2008,ado.net,linq-to-entities,C#,Linq,Sql Server 2008,Ado.net,Linq To Entities,我刚刚意识到,如果您的C#应用程序使用LINQ-TO-SQL类与数据库进行接口,您可以像这样执行查询 using (DatabaseContext context = new DatabaseContext()) { context.Log = Console.Out; var query = from Person p in context.People where
using (DatabaseContext context = new DatabaseContext())
{
context.Log = Console.Out;
var query = from Person p in context.People
where person.Name == "john"
select p;
Console.WriteLine(query.Name);
}
对于context.Log=Console.Out
或者,还有其他方法可以查看对数据库的实际SQL查询吗?如果您有MS SQL Server,我总是使用SQL Profiler。这是什么数据库管理系统?LINQ 2实体支持多种DB类型 这也适用于
var cust = (from c in context.Customers select c);
string sql = ((ObjectQuery)cust).ToTraceString();
从可以在使用LINQ2实体时跟踪SQL 您可能还想看看这个工具
我相信Microsoft SQL Server使用的表格数据流()协议在默认情况下以纯文本形式发送命令和响应,因此除非您加密SQL Server和客户端之间的连接,否则您应该能够以全面的方式查看请求和响应 这需要一些工作,但是以这种方式使用数据包嗅探器应该可以让您看到LINQ被翻译成了什么T-SQL 旁注:
EF与LINQtoSQL使用的基于流的登录没有直接的并行性。有许多分析选项可用于各种成本。我已经在会议上讨论了其中一些选项。您可以在。上找到这些探查器和其他LINQ工具的列表。使用EntityFrame 6,至少在使用MySQL时,您可以在查询中找到一个ToString()
var cust = (from c in context.Customers select c);
string sql = cust.ToString();
正如注释中的Greg所说,这将为您提供参数化查询,因此您需要添加要使用的值。@slivernja这是针对sql 2008 R2 express的+1用于提及SQL Profile“SQL跟踪LINQ到实体”链接的可能重复项已不存在。这非常有用。它不会像Profiler那样提供精确的sql,而是将其参数化。但当我遇到分析器问题时,这在SQL Server中很有帮助。实体框架实际返回的输出为
Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable