2009-06-12 110 views
3

總根源,我想創造一個更加結構化的方法來加載所需要的實體樹:預先加載與實體框架

我需要的數據嚴重金額,所以我這樣做是使用類型安全包括(只是一個正常的包含但帶有Lambda的)as shown here

正如我所說,我需要大量的數據,基本上是一個父項下的整個實體樹。現在

,我能做到這一點做這樣的事情:

context.House 
    .Include(x => x.Doors) 
    .Include(x => x.Doors.FirstOrDefault().Joint) 
    .Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory) 
    .Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory.JointType) 
    .Include(x => x.Windows) 
    // ... same thing 
    .Include(x => x.Roof) 
    // ... same thing 

正如你所看到的,此行充滿了包括可以得到相當巨大。這實際上是一個非常簡化的實際代碼示例(不包括房屋btw)

所以我想要做的是創建方法,負責樹中的分支。該方法可以接受對象查詢幷包含子對象,並且依次調用「子對象加載器方法」。此外,父母只要具有兒童類型的財產就無關緊要。

這可能沒有多大的意義如此:

public void LoadHouse(int id) 
{ 
    // ... 
    ObjectQuery<House> query = context.House; 

    // and now? 
    LoadDoors(query, x => x.Door); 

} 

public void LoadDoors<T>(ObjectQuery<T> query, ..?..) 
{ 
    // ... ? 

    LoadJoints(...) 


} 

等。但是我無法真正理解它......傳入的查詢和調用子方法之間缺少關聯。

有沒有人做過這樣的事情?或者任何人都可以給我一些指點?

回答

2

嘗試是這樣的,而不是:

查詢= LoadDoors(查詢,X => x.Door);

其中,LoadX返回調用Include的結果。

+0

我不明白需要將表達式傳遞給LoadDoors方法,LoadDoors方法當然知道該表達式? – 2009-06-12 17:23:15