asp.net-web-api - Odata查询不会扩展

标签 asp.net-web-api odata

我正在使用如下网址查询我的服务:

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
}

但不包含UserSection对象。不会抛出任何错误。在数据库中查询(分析)正确的对象,并返回包括用户和部分的数据。

最佳答案

我发现 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/

相关文章:

odata - simple.odata.client 查询参数

odata - 使用 odata 选择不同的值

javascript - JS 将 OData $filter 字符串解析为对象结构

asp.net-mvc - 如何保护对返回 JSON 的 MVC 操作的访问

asp.net-web-api - 从 Web Api 2 中的 OData 客户端调用补丁的正确方法是什么

c# - 分块到 ASP.Net Web API 的多个异步文件上传

javascript - 代码中硬编码的 Web API 调用与多种环境的比较

.net - ASP.NET Web API 在单个服务中自托管 HTTPS 和 HTTP?

dependency-injection - 简单注入(inject)器 webapi 授权属性

.net - ASP.NET MVC 4 WebAPI PostAsJsonAsync Newtonsoft.Json 错误