5
我正在分析使用MS SQL 2008從實體框架1生成的SQL的性能。我的實體框架生成的SQL執行兩次嗎?
當我在SQL Server Profiler 2008中運行跟蹤時,我注意到了一些我沒有想到的東西。對於每個執行的查詢,我得到兩條RPC:Completed
語句,用exec sp_reset_connection statement
分隔。這是預期的行爲?
我正在分析使用MS SQL 2008從實體框架1生成的SQL的性能。我的實體框架生成的SQL執行兩次嗎?
當我在SQL Server Profiler 2008中運行跟蹤時,我注意到了一些我沒有想到的東西。對於每個執行的查詢,我得到兩條RPC:Completed
語句,用exec sp_reset_connection statement
分隔。這是預期的行爲?
答:是
事實證明,這是一個 「功能」 內AutoMapper這引起了我的問題。
在這裏看到:When Mapping an IQueryable I see the database getting hit twice in my profiler.
不幸的是,因爲我使用的是1.1版(.NET 3.5)這看起來並不像它會得到固定。
解決方案:呼叫.ToList()
所述的IQueryable對象上之前將其傳遞到Mapper.Map()
方法。允許Mapper枚舉該對象會導致雙重執行。
你可以發佈你正在運行的代碼嗎? – 2012-03-14 04:58:33
@ajcvickers我正在處理的系統是相當龐大的,所以現在提供代碼是不可能的,我需要一些時間才能獲得原型。我認爲這不是你期望的那樣? – Tr1stan 2012-03-14 17:22:23
每次枚舉LINQ to Entities查詢(例如使用ToList())時,都會針對數據庫執行查詢。我想知道是否是這樣。 – 2012-03-14 18:33:44