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(...)
}
等。但是我無法真正理解它......傳入的查詢和調用子方法之間缺少關聯。
有沒有人做過這樣的事情?或者任何人都可以給我一些指點?
我不明白需要將表達式傳遞給LoadDoors方法,LoadDoors方法當然知道該表達式? – 2009-06-12 17:23:15