天天看點

一起談.NET技術,看看Entity Framework 4生成的複雜的分頁SQL語句

  >>> 來看一看,瞧一瞧!

  上代碼:

一起談.NET技術,看看Entity Framework 4生成的複雜的分頁SQL語句

  看生成的SQL語句:

  1. Entity Framework生成的SQL:

一起談.NET技術,看看Entity Framework 4生成的複雜的分頁SQL語句

  一個TOP,三個FROM。

  2. LINQ to SQL生成的SQL:

一起談.NET技術,看看Entity Framework 4生成的複雜的分頁SQL語句

  無TOP,兩個FROM。

  兩者的差距一目了然。

  >>> 再來看一個:

  将上面代碼中Where的查詢條件改為常量,即Where(coder => coder.Age > 20),見下圖:

一起談.NET技術,看看Entity Framework 4生成的複雜的分頁SQL語句

  然後看看生成的SQL。

一起談.NET技術,看看Entity Framework 4生成的複雜的分頁SQL語句

  2. LINQ to SQL生成的SQL與之前的一樣。

  Entity Framework考慮了多資料庫支援、存儲過程支援,卻忽視了這個地方。

  目前看來,如果用Entity Framework 4,并在乎性能,隻有兩個選擇:1. 不用LINQ to Entities,自己寫SQL或存儲過程;2. 自己寫個Entity Framework ADO.NET provider for SQL Server 。

  更新:從執行計劃來看, Entity Framework生成的SQL似乎對性能沒什麼影響。 

  補充:

  兩個SQL的執行計劃比較:

  a) Entity Framework生成的SQL:

一起談.NET技術,看看Entity Framework 4生成的複雜的分頁SQL語句

  b) LINQ to SQL生成的SQL:

一起談.NET技術,看看Entity Framework 4生成的複雜的分頁SQL語句