我正在使用如下网址查询我的服务:
http://a.com:3080/odata/DiscussionVM(6) ?$expand=部分,用户
在 Controller 方法上:
[EnableQuery(MaxExpansionDepth = 7)]
public SingleResult<DiscussionVM> GetDiscussionVM([FromODataUri] int key)
{
return SingleResult.Create(db.DiscussionVMs.Where(discussionVM => discussionVM.DiscussionId == key));
}
这可以工作并返回正确的 JSON。
但是,我随后在不同的模型上运行稍微更高级的查询:
http://a.com:3080/odata/OrganisationVM(30)?& $expand=类别($expand=讨论($expand=部分,用户))
和 Controller 操作:
// GET: odata/OrganisationVM(5)
[EnableQuery(MaxExpansionDepth = 5, AllowedQueryOptions = AllowedQueryOptions.All)]
public SingleResult<OrganisationVM> Get([FromODataUri] int key)
{
return SingleResult.Create(db.OrganisationVMs.Where(organisationVM => organisationVM.OrganisationId == key));
}
这将返回以下 DiscussionVM JSON:
{
@odata.type: "#Models.DiscussionVM",
DiscussionId: 6,
Section_SectionID: 1005,
User_Id: "4cecc52e-ac3a-4696-ac6c-175af2a6378a",
DateCreated: "2014-12-06T00:00:00Z",
OrgCat_OrganisationCategoryId: 1,
Text: "Dummy section",
Html: null,
IsUserCreated: true,
Organisation_OrganisationId: null,
Positives: null,
Negatives: null,
CommentCount: 1
}
但不包含User
或Section
对象。不会抛出任何错误。在数据库中查询(分析)正确的对象,并返回包括用户和部分的数据。
最佳答案
我发现 oData 需要在其 Edm 模型中引用扩展实体。 如果不是,它将在第一级之后停止扩展,这就是为什么进一步扩展将不起作用。
只需将可扩展的 EntitySet 添加到 IEdmModel 中的 ODataConventionModelBuilder(在 MapODataServiceRoute 的模型配置中):
var builder = new ODataConventionModelBuilder();
// ...
builder.EntitySet<Categories>("categories");
// ...
希望这有帮助。
关于asp.net-web-api - Odata查询不会扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27367813/