Entity Framework调试是个比较麻烦的事,因为目前它不支持把生成的SQL语句输出到日志或Debug,只能通过SQL Server Profiler来监视SQL执行,不是很方便。顺便提一句,这一点Hibernate就做得比较好。

实际项目上经常利用ObjectQuery的ToTraceString()方法来查看SQL,示例如下:

  1. using(var ctx = new TestDBEntities) 
  2.     var query = ctx.Clients.Where(c => c.Status == 1) 
  3.                 .OrderBy(c => c.ComputerName); 
  4.  
  5.     //调试输出SQL,注意query不能ToList(),否则就不是IQueryable了 
  6.     Debug.WriteLine((query as ObjectQuery).ToTraceString()); 
  7.  
  8.     //后续业务逻辑处理数据 
  9.     foreach(var client in query) 
  10.     { 
  11.         //...... 
  12.     } 

这样在调试时就能看到SQL了,同理可输出到日志文件。