我正在尝试对我的一个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; }
}
以下odata查询有效,并返回Projects
及其Managers
的列表:
/Projects?$expand=Manager
然后我尝试了这个查询,它起作用了:
/Forecasts?$expand=ProjectResource($expand=Project)
添加另一个扩展级别:
/Forecasts?$expand=ProjectResource($expand=Project($expand=Manager))
我得到一个错误,说我只能扩展2个级别。所以我将其添加到我的查询中并重试:
[EnableQuery(MaxExpansionDepth=0)]
我不再收到错误,但不包括每个Manager
的{{1}}。我对失踪的想法有所了解吗?
答案 0 :(得分:3)
我正在努力解决同样的问题。事实证明,在配置期间添加所有实体集允许$expand
在2个级别之后正常工作。
像这样添加所有实体集:
builder.EntitySet<Item>("Items");
builder.EntitySet<Product>("Products");
builder.EntitySet<Model>("Models");
builder.EntitySet<Type>("Types");
我还将[EnableQuery(MaxExpansionDepth = 0)]设置为控制器上的属性。
答案 1 :(得分:2)
您需要在配置期间添加所有实体集,以允许$ expand在2个级别之后正常工作。
声称此问题与复杂类型相关的SO问题无效。
希望能帮助他节省一些时间,因此就浪费了2天!
答案 2 :(得分:0)
我已经添加了所有必需的实体集,但是仍然存在第4级问题:(甚至注释了所有实体集,结果是相同的。还添加了[EnableQuery(MaxExpansionDepth = 5)]来执行操作。SQLProfiler显示正确的实体和适当数量的联接,但响应无效。