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

标签 c# odata

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

但需要更改为:

  1. 排除图片在特定时间返回
  2. 返回一个包含用户集合和总数的对象

为此,我必须开始使用 Users 的 View 模型。我现在有这个对象:

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

最佳答案

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

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

    • 在路由中添加$expand选项:
      https://localhost:44300/odata/CoordsLoadUsers ?$expand=用户数

    • 允许$expand选项:

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

关于c# - 不显示自定义实体中的 OData v4 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40623493/

相关文章:

c# - ListView 中的上下文菜单,选择一个项目

c# - 有充分的理由不使用 ORM 吗?

c# - 使用 odata 和 web api 2 时创建 cookie

c# - $select 和 $expand 中断 ODataQueryOptions——如何修复?

OData 服务返回 404

C# 将 int 类型的 ArrayList 转换为 Point[]

c# - Ninject 工厂 : Create the appropriate class based on a parameter

c# - 如何转义要在 OData 查询中使用的单引号?

c# - 帮助我了解如何在 OOP C# 中使用类

javascript - 单选按钮组上的 SapUi5 数据绑定(bind)不起作用