2012-04-20 45 views
1

我有一個查詢方法,其中有時包括額外的表「類別」和「製造商」根據情況。但是,每當我運行查詢時,類別和製造商導航屬性始終爲空。我究竟做錯了什麼?實體框架3 - 導航屬性Null與變化包含()

private IQueryable<Item> GetQuery(ItemFilter filter, ItemCacheContainer context) 
    { 
     //Perform optional Joins 
     ObjectQuery<Item> query = context.Items; 

     if (filter.JoinCategory) 
      query.Include("Category"); 

     if (filter.JoinManufacturer) 
      query.Include("Manufacturer"); 

     return query.Where(i => 
       (!filter.ItemId.HasValue 
       || i.ItemId == filter.ItemId.Value)); 
    } 

而且,這裏就是我如何使用GetQuery方法,但是當我把一個斷點ConvertItemFromCache我看到那些空的導航性能。

GetQuery(filter, context) 
    .ToList() 
    .ConvertAll(ConvertItemFromCache) 
    .SingleOrDefault(); 

謝謝!

回答

3

您需要設置queryquery.Include("...")

query = query.Include("Category"); 

所以,在你的榜樣結果:

if (filter.JoinCategory) 
query = query.Include("Category"); 

if (filter.JoinManufacturer) 
query = query.Include("Manufacturer"); 
+0

請,你能添加相同的* filter.ItemId.HasValue *!? – 2012-04-20 15:11:00

+0

@AdrianIftode - 他不需要設置查詢,因爲他正在從方法 – Aducci 2012-04-20 15:12:49

+0

d'oh返回它!完全放棄了我的設想。謝謝! – strongriley 2012-04-20 15:16:12