2016-11-16 2 views
3

У меня есть список объектов пользователя из БД, который имеет следующие 5 полей. последнее поле очень велико.OData v4 Коллекция в пользовательском объекте не отображается

public class User 
{ 
    [Key] 
    public int Id { get; set; } 
    public string UserName { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public byte[] FromImage { get; set; } 
} 

Перед в моем пользовательском методе действий: GetUsersExcludingPics, я возвращал список этих пользователей с простым Linq запросом и everythign было нормально

return _dbContext.Users; 

но необходимость запрошенного изменение заключается в следующем:

  1. исключить возврат изображения в определенное время
  2. вернуть объект, в котором есть коллекция пользователей и полное оцепенение er

Чтобы достичь этого, я должен начать использовать viewmodel of Users. У меня сейчас этот объект:

public class CoordsLoadUsers 
{ 
    [Key] 
    public int ID { get; set; } 
    public ICollection<UserViewModel> Users { get; set; } 
    public int TotalUsers { get; set; } 
} 

, и я должен был дразнить их лиц в ODataConventionBuilder признать их:

ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); 
builder.EntitySet<CoordsLoadUsers>("CoordsLoadUsers"); 
builder.EntitySet<UserViewModel>("UserViewModel"); 

и я загрузил своим пользователям, как это сейчас:

var users = _dbContext.Users.Select(u => new UserViewModel 
     { 
      Id = u.Id, 
      UserName = u.UserName, 
      FirstName = u.FirstName, 
      LastName = u.LastName 
     }); 

     var matchingUsers = usersInRegion.Take(10); 
     coordLoadUsers.Users = matchingUsers.ToList<UserViewModel>(); 
     coordLoadUsers.TotalUsers = usersInRegion.Count(); 
     return coordLoadUsers; 

Я настраиваю точку прерывания на пользователя coordLoadUsers.Users и, кажется, заполняет пользователей, но скрипач показывает это только. Не упоминается список пользователей. Что мне не хватает? enter image description here

ответ

3
  1. Вы можете использовать AutoExpandAttribute класса включают содержание свойства навигации Users в результате имплицитно:

    public class CoordsLoadUsers 
    { 
        [AutoExpand] 
        public ICollection<UserViewModel> Users { get; set; }  
    } 
    
  2. Чтобы сделать это явно:

    • Добавить $ развернуть на маршрут:? https://localhost:44300/odata/CoordsLoadUsers $ расширяющие = Пользователи

    • опцию Разрешить $ расширить:

      builder 
          .EntitySet<CoordsLoadUsers>(nameof(CoordsLoadUsers)) 
          .EntityType 
          .Expand(nameof(CoordsLoadUsers.Users)); 
      
Смежные вопросы