我正在尝试对我的一个 odata 查询(3 级)执行嵌套展开,但无法返回展开后的对象。
这是我的类(class):
public class Project
{
public int ProjectId { get; set; }
public Manager Manager { get; set; }
public IEnumerable<ProjectResource> ProjectResources { get; set; }
}
public class ProjectResource
{
public int ProjectResourceId { get; set; }
public Employee Employee { get; set; }
public Project Project { get; set; }
public IEnumerable<Forecast> Forecasts { get; set; }
}
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public Manager Manager { get; set; }
public IEnumerable<ProjectResource> ProjectResources { get; set; }
}
public class Manager
{
public int ManagerId { get; set; }
public string Name { get; set; }
}
public class Forecast
{
public int ForecastId { get; set; }
public ProjectResource ProjectResource { get; set; }
}
以下 odata 查询有效,并返回 Projects
及其 Managers
列表:
/Projects?$expand=Manager
然后我尝试了这个查询,它成功了:
/Forecasts?$expand=ProjectResource($expand=Project)
添加另一层展开:
/Forecasts?$expand=ProjectResource($expand=Project($expand=Manager))
我收到一条错误消息,提示我只能扩展 2 个级别。所以我将其添加到我的查询中并重试:
[EnableQuery(MaxExpansionDepth=0)]
我不再收到错误,但是每个 Project
的 Manager
不包括在内。知道我缺少什么吗?
最佳答案
我遇到了同样的问题。事实证明,在配置期间添加所有实体集允许 $expand
在 2 个级别后正常工作。
像这样添加所有实体集:
builder.EntitySet<Item>("Items");
builder.EntitySet<Product>("Products");
builder.EntitySet<Model>("Models");
builder.EntitySet<Type>("Types");
我还将 [EnableQuery(MaxExpansionDepth=0)] 设置为 Controller 上的一个属性。
关于c# - odata 深层次扩展不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42724262/