Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到实体:查看结果查询(context.Log=Console.Out)_C#_Linq_Sql Server 2008_Ado.net_Linq To Entities - Fatal编程技术网

C# Linq到实体:查看结果查询(context.Log=Console.Out)

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

我刚刚意识到,如果您的C#应用程序使用LINQ-TO-SQL类与数据库进行接口,您可以像这样执行查询

        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

旁注

  • 我建议您加密客户机和SQL server之间的所有通信,除非客户机和服务器都位于同一台计算机上,并且您正在进行开发测试
  • 如果您不能冒险使用decyrpted连接进行测试,那么您的数据包嗅探器可能有一个允许您解密加密流量的插件,但我不确定使用这样的解密插件是否有任何风险

  • 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