oData v4简单来说函数和操作是什么?

use*_*510 4 .net odata asp.net-web-api asp.net-web-api2 odata-v4

在oData 4.0中经常引用动作和函数.我无法得到他们是什么以及他们是如何不同的.功能是否与我们在任何编程语言中的功能相同?什么是行动?以及两者是如何不同的.谢谢你的帮助.

Vin*_*nit 7

操作 - 可用于对实体执行CRUD操作.这意味着,如果默认操作(POST/PUT/DELETE)不支持您的要求,您可以使用自定义操作创建,更新,删除实体.您还可以使用自定义操作从复杂类型的多个实体中获取数据.操作类似于SQL中的存储过程,它允许SELECT和DML查询.

函数 - 理想情况下,您应该使用函数来获取数据而不是数据修改.这些类似于SQL中的函数,它只允许SELECT查询.


Ren*_*ene 5

规范复制的简短解释:

操作是由 OData 服务公开的操作,在调用时可能会产生副作用。动作可以返回数据,但不能进一步由额外的路径段组成。

函数是由 OData 服务公开的操作,必须返回数据并且必须没有可观察到的副作用。

路径段
OData URL 的每个单独部分都是一个路径段。URI/Products(1)/Supplier具有三个路径段。

  • 实体集 - Products
  • 钥匙 - 1
  • 导航 - Supplier


Fan*_*ang 0

从OData.org的规范来看,它们都是操作,区别在于是否有副作用。

在WebAPI/OData的实现中,您可以参考这里的文档:

http://odata.github.io/WebApi/#04-06-function-parameter-support

http://odata.github.io/WebApi/#04-07-action-parameter-support

可以看到签名很明显:

行动:

[HttpPost]
public IHttpActionResult PrimitiveAction(ODataActionParameters parameters)
Run Code Online (Sandbox Code Playgroud)

功能:

[HttpGet]
public string ComplexFunction([FromODataUri]Address c1, [FromODataUri]IEnumerable<Address> c2)
Run Code Online (Sandbox Code Playgroud)