如何分析LINQ查询

时间:2011-04-01 17:19:28

标签: asp.net linq

我发誓我之前已经看过如何做到这一点,但现在我真的需要这样做,我不记得我在哪里看到它。我需要两件事 -

1)查看LINQ查询生成的实际SQL查询 2)何时 SQL查询实际上命中数据库做任何事情(CRUD操作)

是否有工具可以让我这样做?

修改

抱歉,应该提供更多细节。 - LINQ to Entities就是我正在使用的。 - 另外,我对我们的SQL Server实例没有管理员权限,所以我不能使用SQL事件探查器。我总是可以打电话给DBA并让他们为我做,但这很麻烦。我应该提到这一点而且我道歉。我真正想要的是一个工具,我可以在我自己的盒子上使用,这将允许我看到LINQ查询在我处于调试模式时调试数据库(调试和单步执行代码)。

7 个答案:

答案 0 :(得分:7)

尝试使用SQL Profiler。它非常适合查看LINQ to SQL正在生成的内容。

  

SQL事件探查器是一种图形工具,允许系统管理员监视Microsoft®SQLServer™实例中的事件。您可以捕获有关每个事件的数据并将其保存到文件或SQL Server表中,以便稍后进行分析。例如,您可以通过执行太慢来监视生产环境以查看哪些存储过程妨碍了性能。

LINQPad也是编写linq和sql语句进行测试的好工具。

  

LINQPad使用.NET的CSharpCodeProvider(或VBCodeProvider)编译您的查询。因为C#和VB是静态类型的,所以您引用的任何数据库对象都需要支持类型化的DataContext。为了提高性能,LINQPad使用Reflection.Emit动态构建类型化的DataContexts,而不是生成和编译源代码。它使用LINQ to SQL而不是Entity Framework,因为LINQ to SQL在实例化时构建元模型的速度要快一个数量级。

答案 1 :(得分:3)

LINQ to SQL .ToString()上的IQueryable将显示查询。

var myquery = from x in dbcontext.MyTable
              where x.Prop1 == someValue
              select new {
                  value1 = x.prop1,
                  value2 = 5,
              };

var sqlstring = myquery.ToString(); //<= look in this string

答案 2 :(得分:2)

有一些工具可以提供帮助。

L2SProf(Linq2Sql Profiler)是一款付费工具,可以帮助您查看和优化查询。 http://l2sprof.com/

LinqPad是一个很棒的工具,用于将linq写入sql查询并查看出来的sql。它还允许您编写c#代码以试验事物。这是一个很棒的编码便笺簿。有一个免费版本,但如果你支付,你会得到额外的功能。 http://www.linqpad.net/

否则,这里有说明可以使用内置函数免费查看生成的sql:http://msdn.microsoft.com/en-us/library/bb386961.aspx

答案 3 :(得分:1)

使用Visual Studio 2010,打开IntelliTrace,您将看到LINQ To SQL,LINQ To Entities以及最终使用ADO.NET的所有内容的每个请求。

答案 4 :(得分:0)

您在寻找DataContext.Log财产吗? (我假设你正在使用LINQ to SQL。)

您可以创建一个TextWriter,每次写入时都会转储堆栈跟踪和时间戳,这样可以为您提供时间信息。

答案 5 :(得分:0)

  1. 完全取决于ORM。大多数ORM提供某种Log属性,您可以插入TextWriter左右。请参阅ORM的文档以了解更多信息。
  2. 一般情况下:当您使用某种SaveChanges方法时。这与(1)相关,记录器将为您提供信息。

答案 6 :(得分:0)