代码之家  ›  专栏  ›  技术社区  ›  Peter Stegnar

实体框架对象树加载

  •  1
  • Peter Stegnar  · 技术社区  · 16 年前

    如何在以下EF实体中加载:

    图片来源: 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);
    < /代码> 
    
    

    但它会加载地址和不带宠物的人。

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

    var address=contex.addresses.include(“peson”).include(“pets”).where(add=>add.id==givenid);
    < /代码> 
    
    

    我得到错误:

    指定的包含路径无效。

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

    图像来源: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);
    

    但它可以装载地址和人,不带宠物。

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

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

    我得到错误:

    指定的包含路径无效。

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

    2 回复  |  直到 16 年前
        1
  •  5
  •   Lucas    16 年前

    您可以通过用“”分隔关系来加载树。

    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
  •  2
  •   TFD    16 年前

    总是从顶层对象向下选择,例如:

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