2011-10-28 40 views
1

Supose這種方法實體框架加盟忽略我所有的包括

private IQueryable<FactureAnonyme> RequeteFacture(params Expression<Func<Facture, object>>[] includes) 
    { 
    return from f in _contexte.Set<Facture>().Include(includes) 
      from mf in f.MontantsFacture.OfType<MontantFrais>().DefaultIfEmpty() 
      from mt in f.MontantsFacture.OfType<MontantTaxeUnit>().DefaultIfEmpty() 
      select new FactureAnonyme 
      { 
       Id = f.Id, 
       Facture = f, 
       MontantsFrais = mf, 
       MontantsTaxeUnit = mt, 
       Frais = mf.Frais, 
       TaxeUnitaire = mt.TaxeUnitaire, 
       Taxe = mt.TaxeUnitaire.Taxe 
      }; 
    } 

當我拿到我的對象「骨折」查詢忽略所有我有,爲什麼?我怎麼能包括我的對象Facture的導航屬性。

N.B.我不想用懶惰加載

謝謝!

回答

2

它是by design。一旦開始使用自定義連接或投影,Include就會丟失。您必須在您的投影類型上公開屬性並手動將其填充到投影中。

+0

這不是非常用戶友好。我寧願編譯器出錯,默認情況下會假定請求是真的做這個工作。 – Francis

+0

好的,它有解決這個問題的方法嗎?我嘗試了很多解決方案,但沒有任何工作......我知道如何用SQL來做這件事,但對於EF來說,這真是一場噩夢! – Francis

+0

它沒有解決方法。您可能希望在可以使用'Include'(=直接實體查詢)的地方進行實體訪問,或者您希望在您必須自行加載所有內容的情況下使用特殊的計劃數據。 –