2012-04-26 40 views
2

使用EF代碼優先和給定的包含列表中的實體,我怎樣才能急切地加載整個對象圖是該實體:急切裝載導航屬性即列表<OfSomeBaseClass>

實施例:

public class Foo 
{ 
    public int Id { get; set; } 

    public List<BarBase> Bars { get; set; } 
}  

public class BarBase 
{ 
    public int Id { get; set; } 

    public string Text { get; set; } 
} 

public class BarTypeA : BarBase 
{ 
    public List<Baz> Bazes { get; set; } 
}  

public class BarTypeB : BarBase 
{ 
    public List<Quux> Quuces { get; set; } { get; set; } 
} 

如果BarBase不是一個基類,可以包含幾個不同亞型的情況下,我可以用

.Include("Bars").Include("Bars.Bazes") 

如果我嘗試

.Include("BarBase").Include("BarBase.Bazes").Include("BarBase.Quuces") 

我得到的錯誤

一個指定的包含路徑無效。 EntityType'BarBase'確實 沒有聲明名爲'Bazes'的導航屬性。

但我怎麼處理這個Bars可以包含不同類型的具體情況,我想急切地加載所有這些事例中,包括包含在這些具體類型的List<T>的?

回答

0

這是EF目前沒有解決方案的reported problem

+0

這個類似的問題有一個可接受的解決方案,但我不明白解決方案。你是否同意接受的答案將解決這類問題? http://stackoverflow.com/questions/7635152/entity-framework-eager-loading-of-subclass-related-objects – 2012-05-23 20:22:51

+0

是的,它應該工作。這是很好的解決方法,但它可能會產生複雜的SQL查詢。 – 2012-05-24 20:01:08