Entity framework 在EF5/6中包含导航属性的导航属性

Entity framework 在EF5/6中包含导航属性的导航属性,entity-framework,entity-framework-5,entity-framework-6,Entity Framework,Entity Framework 5,Entity Framework 6,这是我现有的代码,它获取一个用户并获取他的组 User user = new FetchUserByUsernameServiceCommand(Username, Context).Execute(); var groupList = user.JoinedGroups.ToList<Group>(); return groupList; User User User=new fetchUserByUserNamesServic

这是我现有的代码,它获取一个用户并获取他的组

        User user = new FetchUserByUsernameServiceCommand(Username, Context).Execute();

        var groupList = user.JoinedGroups.ToList<Group>();

        return groupList;
User User User=new fetchUserByUserNamesServiceCommand(用户名,上下文)。Execute();
var groupList=user.JoinedGroups.ToList();
返回群组列表;
每个
都有一个导航属性
图像
,该属性有一个
图像URL

我想
每个
组的
图像
包含在
组列表
中,但是
包含
Lis组列表
中不可用,因为它未附加到
上下文


如何为每个
包含
图像
导航属性?

您可以扩展命令类和构造函数以接受导航属性的表达式,包括:

private string _userName;
private MyContext _context;
private Expression<Func<User, object>>[] _includes;

public FetchUserByUsernameServiceCommand(string userName,
    MyContext context, params Expression<Func<User, object>>[] includes)
{
    _userName = userName;
    _context = context;
    _includes = includes;
}

public User Execute()
{
    IQueryable<User> query = _context.Users;
    if (_includes != null)
    {
        foreach (var include in _includes)
            query = query.Include(include);
    }
    return query.SingleOrDefault(u => u.UserName);
}
您可以使用显式加载:

User user = new FetchUserByUsernameServiceCommand(
    Username, Context)
    .Execute();

var groupList = Context.Entry(user).Collection(u => u.JoinedGroups).Query()
    .Include(g => g.Image)
    .ToList();

return groupList;

请注意,只有第一个选项是即时加载,即用户加组加图像在单个数据库请求中一起加载。第二个选项(显式加载)将运行两个数据库查询—第一个选项仅加载命令执行器中的
用户
对象,第二个选项为该用户加载组和图像。

能否为“组”模型放置代码段?
User user = new FetchUserByUsernameServiceCommand(
    Username, Context)
    .Execute();

var groupList = Context.Entry(user).Collection(u => u.JoinedGroups).Query()
    .Include(g => g.Image)
    .ToList();

return groupList;