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

z0qdvdin  于 2022-12-20  发布在  .NET
关注(0)|答案(2)|浏览(110)

所用软件:

  • ASP.NET网页应用程序接口2.2
  • OData版本4.0
  • 用于. NET的OData客户端(版本6.11)

我已经通过以下this教程创建了一个OData端点:
客户端应用使用OData Client Code Generator从OData端点读取数据。
所使用的模型包含一个订单实体,该订单实体具有链接的订单行实体。通过向以下对象发送GET请求,可以从OData终结点读取订单实体:

https://server/Orders

为了读取订单行实体,我已经配置了一个容器。通过向这个URI发送GET请求可以读取订单行。

https://server/Orders(1)/OrderLines

从我的客户端应用程序,我可以发送这些请求使用OData客户端代码生成器。创建/更新/删除订单实体的工作就像一个魅力。
读取订单行实体也像一个符咒:

var orderLines = _serviceClient.Orders.ByKey(orderId).OrderLines.Execute();

我已经创建了OData端点方法来创建/更新/删除OrderLine实体,但问题是我找不到使用客户端代码生成器为订单创建新的OrderLine实体的方法。我也不知道如何更新或删除OrderLine实体。
对于如何使用客户端代码生成器将POST/PUT/DELETE请求发送到包含方法,有什么建议吗?

wgx48brx

wgx48brx1#

经过一些调查和测试,看起来DataServiceContext类上的AddRelatedObject(object source, string sourceProperty, object target)方法是POST所需的方法,UpdateRelatedObject(object source, string sourceProperty, object target)方法是PUT/PATCH所需的方法。我没有看到专门用于DELETE的方法,所以我不确定如何完成。
但这里有一个如何发布的例子:

var order = _serviceClient.Orders.ByKey(orderId).GetValue();
var newOrderLine = new OrderLine()
{
    ...
};

_serviceClient.AddRelatedObject(order, nameof(order.OrderLines), newOrderLine);
_serviceClient.SaveChanges();

以下是相关文档链接:

qc6wkl3g

qc6wkl3g2#

如果您查看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请求。”
示例:容器.保存更改(保存更改选项.更新时替换);

如何删除:“要删除实体,请调用DeleteObject”

本页还介绍了GETPATCH

相关问题