问题标签 [odatalib]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 当版本 7 中缺少 ODataComplexValue 时,如何在 Microsoft.OData.Core 中创建复杂值?
我正在使用 Microsoft.OData (ODataLib) 版本 7 从 OData 服务解析元数据。
解析 ODataModel 后,我想创建一个示例消息,其中包含所有声明属性的示例值。
到目前为止,一切都很好。适用于属性中的原始值,或枚举甚至集合值。
原始值的示例:
我想创建一个像这样的复杂值:
但是,版本 7 (最新的 NuGet 版本)中不存在 ODataComplexValue 。
我查看了 github:该类在 master 分支中,但不在 ODatav4-7.x 分支中。
https://github.com/OData/odata.net/tree/master/src/Microsoft.OData.Core
如何创建复杂的值?
odata - OData 缩短键谓词支持
我正在使用 Microsoft.OData.Core(等)的 ODataLib v7.1.1 位构建 OData 服务。我在使用带有 ODataUriParser.ParsePath() 的缩短键谓词 URL 格式时遇到问题。(相对)URL“Company('Comp1')/Customer(1)”引发异常“URI 中指定的键数与资源 'Test.Customer' 的键属性数不匹配”。
该模型非常简单,我不明白为什么这不起作用。URL 的其他格式有效(“Company('Comp1')”、“Customer(CompanyId='COMP1',CustNum=1)”)。
我已将模型构建器代码与 $metadata 输出放在下面。任何帮助,将不胜感激。谢谢!
-埃里克
c# - 如何基于共享模型(POCO 类)构建 OData 客户端?
在我的项目中,我使用的是 OData v3 和 v4(背面带有实体框架的 ASP.NET Web API)。目前我使用 Visual Studio 工具构建了一个客户端。
但是还有其他方法吗?我真的必须基于 $metadata 和工具集构建客户端吗?
是否可以通过共享库共享我的模型(合同)并构建这样的客户端:
该模型可以是一组我自己的 DTO 对象,我可以将其映射到等效的实体框架对象。
我的目标是,共享一个文档齐全的模型(源代码 XML 文档)以及附加逻辑,例如ToString
实现和附加属性。此外,我节省了一个额外的步骤:生成客户端(当您在 TFS 构建服务器上自动构建和发布所有包时,这很糟糕)。
这对 OData v3 或 OData v4 可行吗?
c# - 了解 Odata 更新查询
我想更新一个 OData 实体,但首先,我使用 $select 查询从数据源获取实体,以获取我想要更新的基本值和字段。由于 OData 源的性质,更新可能会导致源中的其他区域被更新,所以我想在更新后取回整个实体。
我正在使用OData.net 库。
我的代码遵循这个一般模式:
当我查看客户时,它只包含我使用客户查询检索到的值。但是,我没有使用客户的查询,而是直接使用实体集属性(context.customers)。
当我使用提琴手时,我可以正确看到来自 Client.SaveChangesAsync() 的更新补丁
补丁 https://MyURl/data/Customers(dataAreaId='usmf',CustomerAccount='US-051') {"@odata.type":"#Microsoft.Dynamics.DataEntities.Customer","AddressDescription":"Levridge发票地址","CustomerAccount":"US-051","dataAreaId":"usmf","OrganizationName":"Levridge, LLC"}
我通过 Fiddler 验证了 get 不包含 $select:
从上面的 get 返回的整个实体。响应确实包含整个实体值。
有人知道为什么 customer in:Customer customer = context.Customers.ByKey(dictKey).GetValue();
不包含从 get 返回的值吗?
如何使用响应获取的值更新客户实体属性?
c# - How to update a related CRM entity reference with ODataLib?
I'm using the ODataLib (http://odata.github.io) and the Client Generated Library to access Microsoft CRM's OData API (v9.0).
I'm trying to update the entity navigation property value (the GUID), but the update doesn't seem to do anything (no calls are made).
If I try to update the navigation property's value directly, I get an error saying that "CRM do not support direct update of Entity Reference properties, Use Navigation properties instead".
The entity is basically the middle entity in N:N relationship.
Basically what I'm doing in code is (semi pseudo-code):
Should I be using the AddLink, UpdateLink or something similar? They don't seem to do anything also.
I apologize if the terminology is not correct; I'm quite new to CRM.
c# - 具有复杂类型集合的 C# odata 操作失败
我需要调用一个公开动作的服务器。此操作具有复杂类型集合的字符串或复杂类型集合作为参数。我也需要打电话。
元数据是:
任何一个:
具有以下复杂类型:
或者,或者:
复杂类型定义为
我认为没有办法解决这个问题,因为我们必须一次支持多个更新。
我得到的例外都指向 odata.net 中的严重缺陷。
第一个变体:
第二个变体:
我可以为一个更新制定一个解决方法——但这通常不可用。
我们使用 Odata 客户端,但这不是客户端的问题。堆栈跟踪指向 Odata.Net 堆栈中的限制。更新速度也很慢。替代方案我将不得不手动为这些调用创建 HTTP 请求。
更新:没有解决方法。看起来在 Odata.Net 库中修复此问题之前,我们必须坚持使用标准 REST API 并手动构建有效负载。每个复杂类型都失败了,我无法分解最后一层,因为它包含导航属性。我无法重构参考。我已经在使用自定义反序列化器,因为这是 Odata.Net 中另一个不受支持的场景。除非有人有解决方法,否则此操作与 Odata 兼容,但与 Odata.net 不兼容。
odatalib - 在哪里可以找到 Microsoft.AspNet.OData 的发行说明
我们正在将我们的 Microsoft.AspNet.OData 从 6.0.0 升级到最新的稳定版本。我正在寻找发行说明以了解任何重大更改,但我找不到任何详细说明的页面。甚至不在https://www.nuget.org/packages/Microsoft.AspNet.OData
在哪里可以找到发行说明?
c# - 通过流式传输 json 的某些部分来解析巨大的 OData JSON 以避免 LOH
我有一个 JSON 格式的 OData 响应(以几 MB 为单位),要求是流式传输“JSON 的某些部分”,甚至无需将它们加载到内存中。
例如:当我value[0].Body.Content
在下面的 JSON 中读取属性“”(将以 MB 为单位)时,我想将此值部分流式传输,而不将其反序列化为字符串类型的对象。所以基本上将值部分读入一个固定大小的字节数组并将该字节数组写入目标流(重复该步骤直到该数据完成处理)。
JSON:
尝试的方法:
1. Newtonsoft
我最初尝试使用 Newtonsoft 流,但它在内部将数据转换为字符串并加载到内存中。(这会导致 LOH 突然上升,并且在压缩发生之前内存不会被释放 - 我们的工作进程有内存限制,无法将其保存在内存中)
OData.Net:
我在想这是否可以使用 OData.Net 库,因为它看起来支持字符串字段的流式传输。但不能走得太远,因为我最终为数据创建了一个模型,这意味着该值将被转换为 MB 的一个字符串对象。
代码
/li>
知道如何使用 OData.Net/Newtonsoft 和某些字段的流值部分解析这个 JSON 吗?
这样做的唯一方法是手动解析流吗?
c# - 如果我设置版本,OData 元数据 url 请求将失败
以下代码获得 500:
但这成功了:
这会引发错误:
请求元数据时我不应该指定 DataServiceVersion 有什么特别的地方吗?
odata - 如何选择和扩展仅在派生类型中可用的属性
我有三个实体,在一个继承层次结构中,如下所示。
我想支持 idps 和属性的 $select 和 $expand 查询选项。
/base?$select=idps 给我以下错误
URI 中指定的查询无效。在“Base”类型上找不到名为“idps”的属性。”
什么是正确的 odata 选项,我该如何支持?