编程语言
首页 > 编程语言> > c#-不显示自定义实体中的OData v4集合

c#-不显示自定义实体中的OData v4集合

作者:互联网

我有来自数据库的用户实体列表,该列表具有以下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;

但需要进行的更改是:

>在某些时候排除图像返回
>返回其中包含Users集合和总数的对象

为此,我必须开始使用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处设置了断点,似乎填充了用户,但是fiddler仅显示了这一点.没有提及我的用户列表.我想念什么?
enter image description here

解决方法:

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

public class CoordsLoadUsers
{
    [AutoExpand]
    public ICollection<UserViewModel> Users { get; set; }       
}

>要明确地做到这一点:

>将$expand选项添加到路由:
https://localhost:44300/odata/CoordsLoadUsers?$expand =用户
>允许$expand选项:

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

标签:odata-v4,c
来源: https://codeday.me/bug/20191112/2024287.html