gpt4 book ai didi

OData V4.0 : Auto-assign primary key when creating an entity

转载 作者:行者123 更新时间:2023-12-05 07:37:12 25 4
gpt4 key购买 nike

我正在使用 OData V4.0 API,我正在努力思考如何正确创建实体。我正在使用这个 OData V4.0 reference service .

我的“天真”假设(基于大多数数据库的工作方式)是,当将实体发布到集合时,我会省略主键并让服务生成它并在响应中将其返回给我。

换句话说,当我发出以下请求时:

POST http://services.odata.org/Experimental/OData/(S(<SessionID>))/OData.svc/Products
Content-Type: application/json

{
"@odata.type": "ODataDemo.Product",
"Name": "Widget",
"Description": "A simple widget",
"ReleaseDate": "1991-01-01T00:00:00Z",
"DiscontinuedDate": null,
"Rating": 4,
"Price": 2.5
}

我期待状态码为 201 Created 的答复和一个 Location标题类似 http://services.odata.org/Experimental/OData/(S(<SessionID>))/OData.svc/Products(11) .

相反,我收到以下错误:

The serialized resource has a null value in key member 'ID'. 
Null values are not supported in key members.

所以我想,也许我可以将其设置为任意值,服务将忽略它并发布自己的 ID。所以我尝试以下请求:

POST http://services.odata.org/Experimental/OData/(S(<SessionID>))/OData.svc/Products
Content-Type: application/json

{
"@odata.type": "ODataDemo.Product",
"ID": 0,
"Name": "Widget",
"Description": "A simple widget",
"ReleaseDate": "1991-01-01T00:00:00Z",
"DiscontinuedDate": null,
"Rating": 4,
"Price": 2.5
}

但是,当我这样做时,该服务实际上会使用我提交的 ID 并返回使用该主键的实体 URL,即使具有该键的实体已经存在。

然后当我尝试获取该 URL 时,响应只是说 Syntax Error .当我查询整个集合时,我可以看到现在有两个实体 ID=0 ,以前存在的那个和我创建的那个。

这只是引用服务实现中的一个错误吗?还是 OData 真的没有规定来处理在创建实体时让服务分配主键的(大概很常见的)场景?

最佳答案

这是服务实现中的错误。很可能 ODataDemo.Product 尚未在 ORM 或基础数据库中声明身份种子。

危险信号是,如果发布的结果是 ID 为零(或任何 ID),允许您创建具有相同 ID 的多行并且没有出现错误,则该数据类型没有正确定义。

在服务中按您预期的方式运行(代表您植入身份列),结果将是响应中的 ID 将是基础数据库表的下一个增量 ID,而不是您传入的 ID .

An implementation that allows multiple rows to have the same ID is not OData v4 compliant, unless of course the ID column IS NOT the primary key column. The syntax for selection or operating on a single record depends on the existence and declaration of the column that can be used to uniquely reference each row.

This is the column that is referenced by the value 11 in the brackets in the url: .../Products(11)

关于OData V4.0 : Auto-assign primary key when creating an entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48775820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com