如何急切地包含子对象的导航属性

本文关键字:导航 属性 对象 何急切 包含 | 更新日期: 2023-09-27 18:22:05

假设我的对象图看起来像:

User
 => Friends
   => Clicks
     => Urls

所以当我加载一个用户时,我也想快速加载导航属性Friends。我想让朋友对象快速加载点击等等。

使用我现在的代码,我只能在1个级别上做到这一点:

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

这可能吗?

  • 我使用的是MVC 4.1
  • 我目前使用的存储库模式基于http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

如何急切地包含子对象的导航属性

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

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();