0

Вот мой существующий код, который извлекает пользователя и получает его группы.Включить навигационное свойство навигационного свойства в EF5/6

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

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

     return groupList; 

Каждый Group имеет свойство навигации Image который имеет ImageUrl.

Я хотел бы IncludeImage каждого Group в groupList, но Include не доступен на Lis<Group> groupList, потому что он не привязан к Context.

Как я могу включить навигационное свойство Image для каждого Group?

+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 в исполнитель команды, а второй - загружает группы плюс изображения для этого пользователя.

 Смежные вопросы

  • Нет связанных вопросов^_^