如何热切地为子对象包含导航属性

时间:2013-07-12 20:27:15

标签: c# entity-framework-4.1 repository-pattern

说我的对象图看起来像:

User
 => Friends
   => Clicks
     => Urls

所以当我加载一个用户时,我也希望eagirly加载导航属性Friends。我希望朋友对象能够加载点击等等。

使用我现在拥有的代码,我只能在1级执行此操作:

public User GetUserById(int userId)
{
  return Get(x => x.Id == userId, includeProperties: "Friends").FirstOrDeafult();
}

这可能吗?

1 个答案:

答案 0 :(得分:1)

显然,此存储库实现只是用逗号(includeProperties)拆分includeProperties.Split(new char[] { ',' }参数,然后调用

query = query.Include(includeProperty);

表示拆分结果数组中的每个元素。对于您的示例,您可以使用虚线路径:

return Get(x => x.Id == userId, includeProperties: "Friends.Clicks.Urls")
    .FirstOrDefault();

它将加载从根User实体到最后一个导航属性Urls的路径上的所有实体。

如果你在User中有另一个导航属性 - 比如Profile - 并且你也想急切地加载它,那么似乎支持这种语法:

return Get(x => x.Id == userId, includeProperties: "Profile,Friends.Clicks.Urls")
    .FirstOrDefault();