Entity Framework - Include multiple level properties

只愿长相守 提交于 2020-01-31 05:33:22

问题


I am trying to get a table from database using entity framework.

The table has reference to other table which again has reference to other tables. I know how to include other tables. And according to this answer and this MSDN page including multiple levels are like this:

entity.TableLevel1.Include(tLvl1=>tLvl1.TableLevel2.Select(tLvl2=>tLvl2.TableLevel3));

But my question is, how to include another table at level 3 ?

This seems not to work:

entity.TableLevel1
          .Include(tLvl1=>tLvl1.TableLevel2
               .Select(tLvl2=>tLvl2.TableLevel3)
               .Select(tLvl2 => tLvl2.AnotherTableLevel3);

回答1:


Add another Include call:

entity.TableLevel1.Include(tLvl1=>tLvl1.TableLevel2.Select(tLvl2=>tLvl2.TableLevel3))
                  .Include(tLvl1=>tLvl1.TableLevel2.Select(tLvl2=>tLvl2.AnotherTableLevel3));

If you want to load related entities that are at the same level you should call Include extension method for each of them.




回答2:


You can make multiple Include() calls:

entity.TableLevel1.Include(t1 => t1.TableLevel2);
entity.TableLevel1.Include(t1 => t1.TableLevel2.Select(t2 => t2.TableLevel3));
entity.TableLevel1.Include(t1 => t1.TableLevel2.Select(t2 => t2.AnotherTableLevel3));

or

entity.TableLevel1.Include("TableLevel2");
entity.TableLevel1.Include("TableLevel2.TableLevel3");
entity.TableLevel1.Include("TableLevel2.AnotherTableLevel3");

But you can mark your navigation properties as virtual and will be lazy loading, so you dont need to make the Include() calls:

class TableLevel1
{
    public virtual TableLevel2 TableLevel2 { get; set; }
}

class TableLevel2
{
    public virtual TableLevel3 TableLevel3 { get; set; }

    public virtual TableLevel3 AnotherTableLevel3 { get; set; }
}



回答3:


Using EF 6.2 (not core) this gave me a headache for a few hours, only to find that the reason this wasn't working...

.Include("InspectionResultsByPerspective") .Include("InspectionResultsByPerspective.InspectionResults") .Include("InspectionResultsByPerspective.InspectionResults.PreparationTasksResults")

was because the type PreparationTasksResults had no default ctor!!! ahhh!

Give it a default ctor and you can include to your heart's content :) or so it seems for me



来源:https://stackoverflow.com/questions/35655428/entity-framework-include-multiple-level-properties

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!