如何解决在OData Url中使用复合身份密钥的实体?

Vik*_*orZ 10 url entity composite-primary-key odata asp.net-web-api

我有一个具有OrderIdProductId整数字段的实体OrderItem,这两个字段构成了该表的标识键/主键. 我想使用OData/Web API通过服务公开这些实体,并能够通过它们的复合ID选择OrderItem实例.

URL的格式应该是什么?

是否有处理此类方案的最佳做法?

Vit*_*SFT 15

URL中的复合键使用如下语法:

~/OrderItems(OrderId=1234,ProductId=1234)
Run Code Online (Sandbox Code Playgroud)

"语法"在OData ABNF构造规则中定义(参见"compoundKey"的定义)

可以在OASIS的OData版本4.0中找到示例用法.第2部分:URL约定和勘误表03

请注意,自复合OData 1.0以来,"复合键"(又名"复杂键谓词")就已存在.


小智 5

首先,必须确保在配置文件中明确提及它具有复合键

builder.EntityType<OrderItem>().HasKey(t => new { t.OrderId, t.ProductId});
Run Code Online (Sandbox Code Playgroud)

然后,该操作应具有以下标头

public SingleResult<OrderItem> Get([FromODataUri] string keyOrderId, [FromODataUri] string keyProductId)
Run Code Online (Sandbox Code Playgroud)

请注意两个参数都使用了prefix(key)!

这是OData V4。另请参阅https://odata.github.io/WebApi/13-06-KeyValueBinding/