odata 深层扩展不起作用

ara*_*zzy 3 c# odata asp.net-web-api

我正在尝试对我的 odata 查询之一(3 个级别)执行嵌套扩展,但无法返回扩展对象。

这是我的课程:

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; }
}
Run Code Online (Sandbox Code Playgroud)

以下 odata 查询有效,并返回一个Projects和它们的列表Managers

/Projects?$expand=Manager
Run Code Online (Sandbox Code Playgroud)

然后我尝试了这个查询,它起作用了:

/Forecasts?$expand=ProjectResource($expand=Project)
Run Code Online (Sandbox Code Playgroud)

添加另一个级别的展开:

/Forecasts?$expand=ProjectResource($expand=Project($expand=Manager))
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,说我只能扩展 2 个级别。所以我将它添加到我的查询中并重试:

[EnableQuery(MaxExpansionDepth=0)]
Run Code Online (Sandbox Code Playgroud)

我不再收到错误消息,但不包括Managerfor each Project。知道我缺少什么吗?

小智 6

我正在努力解决同样的问题。事实证明,在配置期间添加所有实体集可以$expand在 2 个级别后正常工作。添加所有实体集,如下所示:

builder.EntitySet<Item>("Items");
builder.EntitySet<Product>("Products");
builder.EntitySet<Model>("Models");
builder.EntitySet<Type>("Types");
Run Code Online (Sandbox Code Playgroud)

我还将 [EnableQuery(MaxExpansionDepth=0)] 设置为控制器上的一个属性。