⑴ 如何得到EF查詢生成的sql
在EF 4.1中,我們可以直接調用DbQuery<>的ToString()方法得到所生成的SQL。
using (var context = new MyDbContext())
{
var people = from p in context.People
where p.PersonID > 100
select p;
string sql = people.ToString();
}
所生成的SQL是:
SELECT
[Extent1].[PersonID] AS [PersonID],
[Extent1].[Name] AS [Name]
FROM [dbo].[People] AS [Extent1]
WHERE [Extent1].[PersonID] > 100
大 家應該已經猜到,這里的ToString()方法其實也就是調用了ObjectQuery<>的ToTraceString()方法。 DbQuery<>.ToString() ==> System.Data.Entity.Internal.Linq.InternalQuery<>.ToString()方法,此方法 在.NET Reflector得到的實現是這樣的:
public override string ToString()
{
return this._objectQuery.ToTraceString();
}