Profile EntityFramework

时间:2012-12-11 01:31:51

标签: sql entity-framework

我有以下示例代码:

  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查询?

有没有这方面的工具?

2 个答案:

答案 0 :(得分:17)

另一个答案中指定的EF Profiler是一个野兽 - 非常强大,但这不是免费的($$,磁盘空间和时间)。它也是由Oren Eini的NHibernate和RavenDB成名。

我喜欢在夹点中使用的工具方式,重量更轻,当然也无法在功能方面与EF Prof进行比较 - 但成本($$,时间和磁盘)是或接近零。

我在LocalDb上使用EF测试了这些轻量级分析器,但它们的主要用例是更传统的Sql Server风格(包括Express)。

ExpressProfiler

到目前为止,最容易使用的一个(也是最简单的-s-show-me-the-SQL-statements-kthxbye)是ExpressProfiler on CodePlex

enter image description here

整个程序是单个126 KB EXE!现在那很轻!

AnjLab Sql Profiler

另一个是来自DataWizard的那个,曾经是免费的(显然价格现在从5美元开始)。

有人设法在开源时保存snapshot on GitHub(包括xcopy可安装的二进制文件)。

可执行文件将自身表示为“AnjLab Sql Profiler”并允许对显示的事件进行一些过滤 - 但这种优势也是它的弱点,因为有太多的事件类型可以启用/禁用。如果选择了所有内容,则输出结果非常冗长。

只有选择特定事件才能获得更好的输出。

enter image description here

以下是为了获得上述输出而选择的事件:

enter image description here

答案 1 :(得分:2)

你有几个选择。

  1. 通过使用((ObjectQuery)query).ToTraceString()在运行时打印查询来检查查询,请参阅https://stackoverflow.com/a/7901917/1070291(我认为这仅适用于查询,因此可能不是上述方案中的最佳选择)
  2. 使用内置于管理工作室的SQL事件探查器
  3. 使用Entity Framework Profiler(非常好的第三方工具和试用版,这是我用来分析查询的内容)