如何查看EF db.entityset生成的SQL?

时间:2009-12-10 17:07:04

标签: .net sql-server entity-framework

我在存储库中有这样的东西:

var results = db.EventSet.Include("Events")
                               .Include("TestResults")
                               .Include("Events.Donors")
                               .Include("Events.DonorPanels")
                               .Include("Events.Locations")
                               .Include("Events.DonorPanels.AgenciesDonors")
                               .Where(x => x.Events.Donors.DonorId == DonorId 
                                      && x.Events.Active)
                               .OrderByDescending(x => x.Events.ScheduledDate)
                               .ThenByDescending(x => x.CreatedAt)
                               .ToList();

如何查看EF为此生成的SQL?

3 个答案:

答案 0 :(得分:2)

SQL事件探查器。

或者,将代码更改为:

var q = db.EventSet.Include("Events")
                           .Include("TestResults")
                           .Include("Events.Donors")
                           .Include("Events.DonorPanels")
                           .Include("Events.Locations")
                           .Include("Events.DonorPanels.AgenciesDonors")
                           .Where(x => x.Events.Donors.DonorId == DonorId 
                                  && x.Events.Active)
                           .OrderByDescending(x => x.Events.ScheduledDate)
                           .ThenByDescending(x => x.CreatedAt);
var sql = (q as ObjectQuery).ToTraceString();
var results = q.ToList();

答案 1 :(得分:1)

一种简单的方法是使用SQL Server Profiler,但要为令人讨厌的意外做好准备。

答案 2 :(得分:0)

Profiler绝对是一个很好的方法,但是如果你是针对SQL Server Express开发的,它就不可用(我知道)。

另一种选择是使用LINQPad。它将显示SQL,Lambda,IL和为linq查询生成的结果。如果您正在进行EF开发IMO,那绝对是必备工具。

http://www.linqpad.net/