asp.net-mvc-4 - 在 OData 结果中包括链接记录的计数

标签 asp.net-mvc-4 asp.net-web-api wcf-data-services odata

我有一个带有链接表“注册”的表“事件”,我想创建一个 OData 服务,该服务返回事件表中的记录以及每个事件的注册数量。数据将在 JavaScript 中在客户端使用,因此我希望减小返回数据的大小,并且不完全包含所有链接的注册记录。

例如:

ID  Title      Date            Regs
1   Breakfast  01.01.01 12:00  4
2   Party      01.01.01 20:00  20

我正在使用 ASP.NET MVC4 构建服务。这些表位于 MSSQL 数据库中。我真的刚刚开始使用 OData 和 LINQ。

我首先尝试使用 WebAPI OData 系统(使用 EntitySetController 的类),但是当我将注册表包含在实体集中时,就出现了神秘的服务器错误。 (“复杂类型‘Models.Registration’通过属性‘Event’引用实体类型‘Models.Event’。”)

我在构建 WCF OData 系统方面取得了更大的成功,并且可以请求事件信息和相关注册信息。

但是,我不知道如何在事件结果集中包含聚合计数信息。我是否需要创建将作为 OData 服务源的自定义实体集?我可能在这里提供的信息太少,无法找到解决方案,但我真的不知道该去哪里寻找。有人可以帮助我吗?

最佳答案

如果您愿意根据 Event 提出额外请求,可以查询 http://.../YourService.svc/Events(<key>)/Registrations/$count (或者 http://.../YourService.svc/Events(<key>)/$links/Registrations?$inlinecount=allpages 如果您还使用指向 Registration 实体的链接)。

这两种方法在公共(public)服务中的示例:

http://services.odata.org/V3/OData/OData.svc/Suppliers(0)/Products/$count

http://services.odata.org/V3/OData/OData.svc/Suppliers(0)/$links/Products?$inlinecount=allpages&$format=json

我猜您更喜欢将此信息与 Events 的其余部分捆绑在一起。虽然回应。这并不理想,但您可以按照以下方式发出查询:

http://services.odata.org/V3/OData/OData.svc/Suppliers?$format=json&$expand=Products&$select=Products/ID,*

我正在扩展Products (类似于您的 Registrations )并选择 Products/ID为了强制响应包含与嵌套 Products 大小相同的数组收藏。我不在乎ID -- 我只是选择了一个很小的数据。通过此 JSON 响应,您的 javascript 客户端可以获得 Products 的长度数组并将其用作 Products 的编号链接到给定的 Supplier .

(注意:要让您的服务支持使用 WCF 数据服务的 $select 查询,您需要在初始化服务时包含此行: config.DataServiceBehavior.AcceptProjectionRequests = true; )

编辑添加:如果您的服务器进行服务器驱动分页,则使用 $expand 和 $select 的方法将不能保证为您提供正确的计数。一般来说,在 OData v3 中没有一种简单的单一响应方法可以完成您所要求的操作,但在 OData v4 中,可以使用新的展开/选择语法实现这一点。

关于asp.net-mvc-4 - 在 OData 结果中包括链接记录的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16525246/

相关文章:

c# - 为 View 模型中的所有属性生成标签、文本框、验证消息

asp.net - MVC4 在单个 View 上显示多个部分 View 的问题

c# - ASP.NET Web API 与 ninject 绑定(bind)

javascript - Web API : error integer codes or error strings?中返回错误

asp.net - 使用 WCF 或 WCF 数据服务封装数据访问层

c# - 在客户端记录 wcf 数据服务 (OData) 请求 url

WCF 数据服务 (OData) 与 ASP.NET Web API

c# - RadioButtonFor 和标签

c# - 提交 Ajax.Beginform 后更新局部 View

c# - Controller 上下文的单元测试空引用异常