C# 未显示自定义实体中的OData v4集合

C# 未显示自定义实体中的OData v4集合,c#,odata,C#,Odata,我有DB中的用户实体列表,其中包含以下5个字段。最后一个字段非常大 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 {

我有DB中的用户实体列表,其中包含以下5个字段。最后一个字段非常大

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查询返回这些用户的列表,并且每个签名都很好

return _dbContext.Users;
但所要求的变更需要:

  • 排除在特定时间返回图像
  • 返回包含用户集合和总数的对象
  • 要实现这一点,我必须开始使用用户的viewmodel。我现在有了这个目标:

    public class CoordsLoadUsers
    {
        [Key]
        public int ID { get; set; }
        public ICollection<UserViewModel> Users { get; set; }
        public int TotalUsers { get; set; }
    }
    
    公共类CoordsLadusers
    {
    [关键]
    公共int ID{get;set;}
    公共ICollection用户{get;set;}
    公共int TotalUsers{get;set;}
    }
    
    我不得不在ODataConventionBuilder中将它们模拟为实体来识别它们:

    ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
    builder.EntitySet<CoordsLoadUsers>("CoordsLoadUsers");
    builder.EntitySet<UserViewModel>("UserViewModel");
    
    ODataConventionModelBuilder=new ODataConventionModelBuilder();
    建筑商实体集(“CoordsLadusers”);
    builder.EntitySet(“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;
    
    var users=\u dbContext.users.Select(u=>newuserviewmodel
    {
    Id=u.Id,
    用户名=u.UserName,
    FirstName=u.FirstName,
    LastName=u.LastName
    });
    var matchingUsers=usersInRegion.Take(10);
    coordLoadUsers.Users=matchingUsers.ToList();
    coordLoadUsers.TotalUsers=usersInRegion.Count();
    返回coordLoadUsers;
    
    我在coordLoadUsers.Users上设置了断点,它似乎填充了用户,但fiddler只显示了这一点。没有提到我的用户列表。我错过了什么?

  • 您可以使用类在结果中隐式包含导航属性
    Users
    的内容:

    public class CoordsLoadUsers
    {
        [AutoExpand]
        public ICollection<UserViewModel> Users { get; set; }       
    }
    
    公共类CoordsLadusers
    {
    [自动展开]
    公共ICollection用户{get;set;}
    }
    
  • 要明确做到这一点:

    • 将$展开选项添加到路由:
      ?$expand=用户

    • 允许$expand选项:

      builder
          .EntitySet<CoordsLoadUsers>(nameof(CoordsLoadUsers))
          .EntityType
          .Expand(nameof(CoordsLoadUsers.Users));
      
      builder
      .EntitySet(合作伙伴的名称))
      .EntityType
      .Expand(名称(CoordsLadusers.Users));