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请求,有什么建议吗?

OData客户端代码生成器,创建和更新包含实体

经过一些调查和测试,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">

GETPATCH也在本页中介绍。

相关文章: