Entity Framework 生成的 SQL

6

是否有可能在全局级别而不是逐个查询的基础上输出 Entity Framework 生成的 SQL?我想将其全部转储到某个地方以便查看。

如果不可能,我该如何查看正在生成的更新和插入的 SQL?

4个回答

7

SQL Server Profiler可以让您在应用程序运行时查看服务器上执行的命令。

另一个免费的 SQL Server 2005 Express 剖析工具在此

更新

查看由LINQ生成的内容的另一种方法是使用DataContext的Log属性。

它是一个TextWriter,应该很容易将其内容保存到文件或重定向到Console.Out。

Log属性的MSDN信息


理想情况下,我希望能够将结果输出到文件中或在Visual Studio中查看SQL,而不必运行分析器或使用其他工具。 - ctorx
5
LINQ to SQL 和 Entity Framework 不同。Entity Framework 上下文没有这个选项。 - ctorx
不错,我从来不知道L2S还有这个功能,这正是我选择它而不是EF的另一个原因 :) - Allen Rice

3

LINQPad非常适合用于查询,但我需要它支持所有事务(即查询、插入、更新、删除)- Matthew 5分钟前 - ctorx
LINQPad也可以完成这些任务,我刚刚亲自验证过了。 - Allen Rice
谢谢,我现在明白了。虽然我希望有一个不同的解决方案,但这个也可以。 - ctorx

1

自从最初提出这个问题以来,现在您还可以使用EFProf来对您的Entity Framework应用程序进行分析,这将允许您查看生成的SQL以及许多其他指标。


EFProf 是商业软件。 - Jason S
1
现在开发者不使用商业软件吗? - glenatron

1

我也在寻找这个答案。事实证明,如果你不介意涉足反射的世界,有一种相当巧妙的方法可以查看EF生成的SQL。

MSDN论坛上一个非常有资源的帖子作者编写了一组扩展方法,让你可以转储ObjectContext的SQL输出(即在调用SaveChanges()时将执行的内容)。

你可以在这里找到链接——查找包含CustomExtensions类的g_yordanov的帖子。

我在过去的一段时间里一直在测试它,似乎非常好用。唯一的问题是,我必须按照David Cater在那个线程中建议的修复方法——将Dictionary<long, object>更改为Dictionary<int, object>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接