我有以下示例代码:
Context context = new Context();
Repository repository = new Repository(context);
Post post = repository.First<Post>(x => x.Id == 1);
Model model = new Model {
Created = cube.Created,
Id = cube.Id,
Name = cube.Name,
Pack = cube.Pack.Id,
Mimes = context.Files.Where(x => x.Id == 1).Select(x => x.Mime).ToList()
};
我需要找到哪些SQL查询被发送到数据库。
如何使用SQL Express和VS 2012配置EF查询?
有没有这方面的工具?
答案 0 :(得分:17)
另一个答案中指定的EF Profiler是一个野兽 - 非常强大,但这不是免费的($$,磁盘空间和时间)。它也是由Oren Eini的NHibernate和RavenDB成名。
我喜欢在夹点中使用的工具方式,重量更轻,当然也无法在功能方面与EF Prof进行比较 - 但成本($$,时间和磁盘)是或接近零。
我在LocalDb上使用EF测试了这些轻量级分析器,但它们的主要用例是更传统的Sql Server风格(包括Express)。
到目前为止,最容易使用的一个(也是最简单的-s-show-me-the-SQL-statements-kthxbye)是ExpressProfiler on CodePlex。
整个程序是单个126 KB EXE!现在那很轻!
另一个是来自DataWizard的那个,曾经是免费的(显然价格现在从5美元开始)。
有人设法在开源时保存snapshot on GitHub(包括xcopy可安装的二进制文件)。
可执行文件将自身表示为“AnjLab Sql Profiler”并允许对显示的事件进行一些过滤 - 但这种优势也是它的弱点,因为有太多的事件类型可以启用/禁用。如果选择了所有内容,则输出结果非常冗长。
只有选择特定事件才能获得更好的输出。
以下是为了获得上述输出而选择的事件:
答案 1 :(得分:2)
你有几个选择。
((ObjectQuery)query).ToTraceString()
在运行时打印查询来检查查询,请参阅https://stackoverflow.com/a/7901917/1070291(我认为这仅适用于查询,因此可能不是上述方案中的最佳选择)