Dynamics crm 长度不能小于零。参数名称:OData客户端的长度

Dynamics crm 长度不能小于零。参数名称:OData客户端的长度,dynamics-crm,odata,dynamics-365,Dynamics Crm,Odata,Dynamics 365,我正在使用OData客户端从D365 AX获取数据。下面是出现问题的一段代码 var test = context.Employees .AddQueryOption("$filter", $"EmployeeNumber eq '{query.EmployeeNumber}'"); var result = await test.ExecuteAsync(); 我得到以下异常 消息:System.ArgumentOutO

我正在使用OData客户端从D365 AX获取数据。下面是出现问题的一段代码

var test = context.Employees
                    .AddQueryOption("$filter", $"EmployeeNumber eq '{query.EmployeeNumber}'");
                var result = await test.ExecuteAsync();
我得到以下异常

消息:System.ArgumentOutOfRangeException:长度不能小于 大于零。参数名称:长度堆栈跟踪: at System.String.Substring(Int32 startIndex,Int32 length) 在Microsoft.OData.TypeUtils.ParseQualifiedTypeName(String qualifiedTypeName、String和namespaceName、String和typeName、Boolean和isCollection) 位于Microsoft.OData.JsonLight.odatajsonlightcontextureparser.ResolveType(字符串类型名,Func
3客户端自定义类型解析器,布尔throwifmetadatadataconflict)
位于Microsoft.OData.JsonLight.odatajsonlightcontextriparser.parseContextrifragment(字符串片段,Func
3客户端自定义类型解析器,布尔throwifmetadatadataconflict,布尔值&未声明) 在Microsoft.OData.JsonLight.odatajsonlightContextRiparser.ParseContextUri(ODataPayloadKind expectedPayloadKind,Func
3客户端自定义类型解析程序,布尔throwIfMetadataConflict)
在Microsoft.OData.JsonLight.odatajsonlightContextureParser.Parse(IEdmModel模型、字符串ContextureFromPayload、ODataPayloadKind payloadKind、Func
3客户端自定义类型解析器、布尔needParseFragment、布尔throwIfMetadataConflict) 在Microsoft.OData.JsonLight.ODataJsonLightDeserializer.ReadPayloadStart(ODataPayloadKind payloadKind,PropertyAndNotationCollector PropertyAndNotationCollector,Boolean isReadingNestedPayload,Boolean allowEmptyPayload) 在Microsoft.OData.JsonLight.ODataJsonLightPayloadKindDetectionDeserializer.DetectPayLoadKindKind(ODataPayloadKindDetectionInfo detectionInfo)中 位于Microsoft.OData.JsonLight.ODataJsonLightInputContext.detectPayLoadKindDetectionInfo(ODataPayloadKindDetectionInfo detectionInfo) 位于Microsoft.OData.Json.ODataJsonFormat.DetectPayloadKindImplementation(ODataMessageInfo、ODataMessageReaderSettings设置) 位于Microsoft.OData.Json.ODataJsonFormat.DetectPayloadKind(ODataMessageInfo消息信息,ODataMessageReaderSettings设置) 在Microsoft.OData.ODataMessageReader.DetectPayloadKind()上 在Microsoft.OData.Client.Materialization.ODataMaterializer.CreateODataMessageReader(IODataResponseMessage responseMessage、ResponseInfo ResponseInfo、ODataPayloadKind和payloadKind) 在Microsoft.OData.Client.Materialization.ODataMaterializer.CreateMeterialPerformMessage(IODataResponseMessage responseMessage,ResponseInfo ResponseInfo,类型MaterialType,QueryComponents QueryComponents,ProjectionPlan,ODataPayloadKind payloadKind) 在Microsoft.OData.Client.MaterializeAtom..ctor(ResponseInfo ResponseInfo、QueryComponents QueryComponents、ProjectionPlan计划、IODataResponseMessage responseMessage、ODataPayloadKind payloadKind) 在Microsoft.OData.Client.QueryResult.CreateMaterializer(ProjectionPlan计划,ODataPayloadKind payloadKind) 在Microsoft.OData.Client.QueryResult.ProcessResult[TElement](ProjectionPlan)上 在Microsoft.OData.Client.DataServiceRequest.EndExecute[TElement](对象源、DataServiceContext上下文、字符串方法、IAsyncResult asyncResult) 在Microsoft.OData.Client.DataServiceQuery
1.EndExecute(IAsyncResult asyncResult)
在System.Threading.Tasks.TaskFactory中
1.FromAsyncCoreLogic(IAsyncResult iar,Func
2 endFunction,Action
1 endAction,Task`1 Promission,布尔要求同步) ---来自引发异常的上一个位置的堆栈结束跟踪---


Kinldy在这方面帮助我。

您的edmx字符串和OData V4客户端代码生成器生成的客户端代码之间似乎存在冲突。我遇到了同样的错误,原因是我将edmx字符串存储在一个单独的文件中,并且使用了该文件的旧版本。最后,更新edmx字符串文件解决了错误。

我将edmx文件存储在单独的文件中,因为元数据太大,无法存储在字符串文字中。我也更新了edmx文件,但我面临着同样的问题。您是否也重新生成了客户端代码?如果没有,那么我建议您重新生成它,更新edmx文件,然后重试。如果我通过右键单击ODataClient.tt文件单击“运行自定义工具”,它也将更新edmx和客户端代码。我已经这样做了,但它还没有工作。一旦运行自定义工具,请确保将客户端代码指向新生成的edmx文件。使用OData v4代码生成器的7.5.1版和OData nuget包的7.5.2版。在将ODataClient.tt文件设置为使用外部文件后,我需要做的唯一修改是将所有“”替换为“”“在生成的xml文件中。一旦我这样做了,我就能够通过代理运行正常的D365FO查询。在此之前,我曾被指导在文件的顶部添加一个XML元素,删除edmx:edmx和edmx:DataServices元素,并将剩下的两个Schema元素组合在一起。如果我执行了所有这些步骤,我会收到OP声明的确切异常。