0

導航性能的導航屬性這裏是我現有的代碼,它獲取用戶和得到他組。包括在EF5/6

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

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

     return groupList; 

每個Group具有具有ImageUrl導航屬性Image

我想在groupListIncludeImage每個Group,但Include因爲它沒有連接到Context不可用的Lis<Group> groupList

我怎麼能包括每個GroupImage導航屬性?

+0

你可以把代碼段爲貴「集團」的模式? – Sampath

回答

0

您可以要麼擴展您的命令類的構造函數接受導航性能表現,包括:

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, u => u.JoinedGroups.Select(g => g.Image)) 
    .Execute(); 

var groupList = user.JoinedGroups.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; 

請注意,只有在第一個選項是在這個意義上急切裝載該用戶加基加上圖像被一起加載在單個數據庫請求。第二個選項(顯式加載)將運行兩個數據庫查詢 - 只加載在命令執行和加載組以及圖像該用戶的第二個中的User對象的第一個。