2010-09-23 99 views
8

我剛剛進行了大規模的*blonde moment**,但突出顯示了我對Entity Framework的煩惱。我禁用了延遲加載,所以我強迫自己實際考慮爲了儘可能快地保持應用程序而需要的數據。實體框架 - 通過集合導航和包含屬性

因此,爲了在查詢中返回的數據,我需要利用Include方法:

var query = from item in context.Customers 
       .Include(x=> x.Orders) 
      select item 

這是罰款,直到我要選擇一個項目成深一點的層次結構。即:

Customer 1-* Orders *-1 Factory 1-1 Factory Type 

據我所知,只有這樣,才能恢復所有的這些數據熱切將做到以下幾點:

var query = from item in context.Customers 
       .Include("Orders.Factory.FactoryType") 
      select item 

通過以上我無法根據我的第一個例子,使用System.Data.Entity Lambdas。有誰知道我是否錯過了這裏明顯的東西,還是我堅持使用字符串聲明通過集合的導航屬性?

如果我沒有任何收藏,我可以只寫:

.Include(x=> x.Order.OrderType.Factory.FactoryType) // No bother 

但由於Orders收集的,沒有辦法,據我可以告訴步驟通過一個孩子財產(FirstOrDefaultSingleOrDefault等,不起作用)。


**它只是一個回合制的短語,我碰巧是非常喜歡金髮的*

回答

14

對於包括EntityCollections使用選擇方法:

var query = from item in context.Customers 
      .Include(c => c.Orders.Select(o => o.Factory.FactoryType)) 
      select item 

請注意,這不是標準ObjectQuery<T>.Include Method的超載,並且僅僅是一個擴展方法ObjectQuery<T> Class with EF CTP4