我有来自数据库的用户实体列表,其中包含以下 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;
但需要更改为:
- 排除图片在特定时间返回
- 返回一个包含用户集合和总数的对象
为此,我必须开始使用 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 只显示了这一点。没有提到我的用户列表。我错过了什么?
最佳答案
您可以使用 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));
关于c# - 不显示自定义实体中的 OData v4 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40623493/