2016-11-16 54 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. 返回一個對象,該對象中包含Users集合並且總麻木呃

爲了達到這個目的,我必須開始使用用戶的viewmodel。我現在有這個對象:

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