c# - odata 深层次扩展不起作用

标签 c# asp.net-web-api odata

我正在尝试对我的一个 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)]

我不再收到错误,但是每个 ProjectManager 不包括在内。知道我缺少什么吗?

最佳答案

我遇到了同样的问题。事实证明,在配置期间添加所有实体集允许 $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/

相关文章:

c# - 如何在使用 OWIN 的 WebApi 项目上启用 Application Insights 服务器遥测?

angularjs - $http.post 的 Web API 405 错误

c# - 在 ODataController 中添加 WebAPI OData $orderby 选项

c# - 设置用户控件以监听基础类库中的更新

c# - LINQ 到 SQL : Left join on multiple columns

c# - 在我的 MVC3 应用程序中使用 jQuery 自动完成

excel - WebApi 使用 EPPlus excel 文件下载 - 打开时出错 - 内容不可读 - 修复

json - 客户关系管理 2011 : Getting entity with Javascript

c# - 防止 Microsoft OData 客户端请求完整元数据

c# - API 扩展中的对象链接与方法