2013-07-24 26 views
4

我正在從一個ORM轉換到另一個(LLBGen Pro到實體框架)。爲了正確重構,我需要了解一些東西。在LLBGen Pro中,有一個概念叫做prefetch paths。存在預取路徑以減少延遲加載對性能產生負面影響時所需的查詢數量。在Gen Pro中,可以說我有50個訂單,我想收集與每個訂單相關的客戶。通過延遲加載,我最終可能會有51個數據庫查詢。由於客戶的延遲加載而不是僅有2個預取路徑啓用的查詢,所以訂單爲1,而每個客戶爲50。實體框架是否需要預取路徑?

我的理解是實體框架(或者LINQ to SQL)可以爲這種情況生成最優化的SQL。實體框架是否足夠聰明,可以在LLB Gen Pro不能的情況下優化查詢?換句話說,實體框架是否能夠在運行時智能地生成SQL,以便「向前看」並查看所有客戶的需求並生成單個查詢而不是50個單獨的查詢?或者,EF是否支持某種類型的「預取路徑」,或者這是否需要某些高級自定義表達式樹......等等?

回答