繁体   English   中英

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

[英]OData v4 Collection within Custom Entity is not displayed

我有来自 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; }
}

在我的自定义操作方法:GetUsersExclusionPics 之前,我使用简单的 linq 查询返回这些用户的列表,一切都很好

return _dbContext.Users;

但需要改变的是:

  1. 排除某些时间返回图像
  2. 返回一个包含用户集合和总数的对象

为了实现这一点,我必须开始使用用户的视图模型。 我现在有这个对象:

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 设置了断点,它似乎填充了用户,但 fiddler 只显示了这一点。 没有提到我的用户列表。 我错过了什么? 在此处输入图片说明

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

     public class CoordsLoadUsers { [AutoExpand] public ICollection<UserViewModel> Users { get; set; } }
  2. 要明确地做到这一点:

    • 将 $ expand选项添加到路由中:
      https://localhost:44300/odata/CoordsLoadUsers ?$expand=Users

    • 允许$expand选项:

       builder .EntitySet<CoordsLoadUsers>(nameof(CoordsLoadUsers)) .EntityType .Expand(nameof(CoordsLoadUsers.Users));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM