OData客户端代码生成器,创建和更新包含实体
本文关键字:更新 包含 实体 创建 客户端 代码生成器 OData | 更新日期: 2023-09-27 18:00:50
使用的软件:
- ASP.NET Web API 2.2
- OData v4.0
- OData Client for.NET(6.11版(
我通过以下教程创建了一个OData端点:
客户端应用程序使用OData客户端代码生成器从OData端点读取数据。
所使用的模型包含一个带有链接OrderLine实体的Order实体。通过向发送GET请求,可以从OData端点读取订单实体
https://server/Orders
为了阅读订单行实体,我配置了一个包含。可以通过向此Uri发送GET请求来读取订单行。
https://server/Orders(1)/OrderLines
从我的客户端应用程序,我可以使用OData客户端代码生成器发送这些请求。创建/更新/删除订单实体就像一种魅力。
阅读订单行实体也很有魅力:
var orderLines = _serviceClient.Orders.ByKey(orderId).OrderLines.Execute();
我已经创建了用于创建/更新/删除OrderLine实体的OData EndPoint方法,但问题是我找不到使用客户端代码生成器为订单创建新的OrderLine实体。我也不知道如何更新或删除OrderLine实体。
关于如何使用客户端代码生成器向包含方法发送POST/PUT/DELETE请求,有什么建议吗?
经过一些调查和测试,DataServiceContext
类上的AddRelatedObject(object source, string sourceProperty, object target)
方法似乎是POST所需要的,而UpdateRelatedObject(object source, string sourceProperty, object target)
方法则是PUT/PATCH所需要的。我没有看到一个专门用于DELETE的,所以我不确定如何实现。
但这里有一个如何POST的例子:
var order = _serviceClient.Orders.ByKey(orderId).GetValue();
var newOrderLine = new OrderLine()
{
...
};
_serviceClient.AddRelatedObject(order, nameof(order.OrderLines), newOrderLine);
_serviceClient.SaveChanges();
以下是相关文档链接:
- 添加相关对象:https://learn.microsoft.com/en-us/dotnet/api/microsoft.odata.client.dataservicecontext.addrelatedobject?view=odata-客户端7.0
- UpdatedRelatedObject:https://learn.microsoft.com/en-us/dotnet/api/microsoft.odata.client.dataservicecontext.updaterelatedobject?view=odata-客户端7.0
如果http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v3/calling-an-odata-service-from-a-net-client您可以看到如何发送这些请求。
如何POST:要向实体集添加新实体,请调用AddToEntitySet,其中EntitySet是实体集的名称。例如,AddToProducts向Products实体集添加一个新Product。生成代理时,WCF Data Services会自动创建这些强类型AddTo方法。
如何更新:"要更新实体,请调用UpdateObject方法。
调用SaveChanges时会执行更新。默认情况下,WCF发送HTTP MERGE请求。PatchOnUpdate选项告诉WCF改为发送HTTP PATCH。
如果要替换整个实体(PUT语义(,请指定ReplaceOnUpdate选项。这会导致WCF发送HTTP PUT请求。">
示例:容器。SaveChanges(SaveChangesOptions.ReplaceOnUpdate(;
如何删除:"要删除实体,请调用DeleteObject">
GET和PATCH也在本页中介绍。