2010-01-19 68 views
1

如何在接下来的EF实体加载:Entitiy Framework对象树加载

alt text

图片来源:http://blogs.microsoft.co.il/blogs/idof/archive/2008/08/20/entity-framework-and-lazy-loading.aspx

比方说,我们有地址的ID,我们要加载与人的地址和宠物。怎么做?

我们能做到这一点

var address = contex.Addresses.Include("Peson").Where(add => add.Id == GivenId); 

但它载入地址和人W/O宠物。

如果我包括宠物实体,像这样:

var address = contex.Addresses.Include("Peson").Include("Pets").Where(add => add.Id == GivenId); 

我得到错误:

一个指定的包含路径无效。

所以,问题是如何加载整个实体树。

回答

5

您可以通过使用分离的关系加载树

context.Address.Include("Person.Pets"); //Include all the persons with their pets 
context.Pets.Include("Person.Address"); //Include all the persons with their addresses 
2

始终从最顶层的对象下移选择,是这样的:“”

var person = from p in context.Person.Include("Pets").Include("Address") 
where p.Address.Id == givenId 
select p; 
+0

比方说,我想通过地址实体加载对象。 – 2010-01-19 10:41:01

+0

你可能会破坏LINQ来做到这一点,但它会令人困惑。宠物和地址之间的关系是人。你不能让你吃蛋糕,它也是! 通过“person.Address”只要迭代,然后就可以得到人与宠物的每个地址 – TFD 2010-01-19 12:34:52