问题
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