【问题标题】:Get generated sql by EF6 on method chaining通过 EF6 在方法链接上获取生成的 sql
【发布时间】:2018-06-01 13:10:17
【问题描述】:

通过 EF6 获取生成的 SQL 的简单搜索会返回大量结果,甚至在 Stackoverflow 中也有很多结果。但是在使用方法链接时,他们都没有提出任何建议。

例如(How do I view the SQL generated by the Entity Framework?):

IQueryable query = from x in appEntities
             where x.id = 32
             select x;

var sql = ((System.Data.Objects.ObjectQuery)query).ToTraceString();

但我想获取生成的 sql 查询,如果它像这样使用:

appEntities.x.Where(x.id==32);

【问题讨论】:

  • 你可以从你的 dbms 获取它
  • 如果您使用的是 SQL Server,您可以在 SQL Profiler 中看到它。
  • 我正在使用 LocalDB
  • 你想检查一些东西还是会以某种方式使用那个 sql 字符串?
  • 我在使用.Any 方法时遇到了一个非常有趣的问题:https://stackoverflow.com/questions/50643128/linq-any-always-returns-true。我正在尝试查看它运行的 sql 查询返回错误值。

标签: c# linq entity-framework-6


【解决方案1】:

您可以使用Diagnostic/Profiling Tools

调试 -> Windows -> 显示诊断工具 (Ctrl+Alt+F2)

在 Visual Studio 中,然后在调试时转到“事件”选项卡并单击 ADO.NET 事件(或只是悬停),该事件将包含查询到 DB 的实际 sql 字符串。

或者你可以添加这一行

dbContext.Database.Log = s => Debug.WriteLine(s);

在您查询之前,它会在 Output -> Debug 中打印出您的查询。

如果您愿意,也可以存储在某个字符串中:

//TODO: Remove after checking
StringBuilder log = new StringBuilder();
dbContext.Database.Log = s => log.Append(s);

【讨论】:

  • @AshkanMobayenKhiabani 在哪里返回 null?它应该在执行查询后在“输出”选项卡中打印出日志。
  • 你知道,appEntities 是一个ObjectContext
  • 我更改了您的代码以将值分配给字符串而不是打印它。
  • @AshkanMobayenKhiabani 也是一个选项。
猜你喜欢
  • 2015-11-07
  • 1970-01-01
  • 2021-12-09
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 2013-11-09
  • 2016-10-11
相关资源
最近更新 更多