运行OData v4客户端代码生成器时的转换错误

Lar*_*ann 6 c# odata

我有一个OData服务,从/$metadata端点返回以下内容:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
  <edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="1.0">
    <Schema Namespace="(...)" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
      <!-- ... -->
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>
Run Code Online (Sandbox Code Playgroud)

当我尝试针对此XML文件运行OData v4客户端代码生成器(v2.3.0)时,出现以下错误:

警告:正在运行转换:根元素的元素'edmx:Edmx'是意外的.根元素应该是Edmx.

警告:未声明" http://schemas.microsoft.com/ado/2007/08/dataservices/metadata:DataServiceVersion "属性.

我也只看到一个空的.cs输出文件.

我已经尝试edmx:<Edmx><DataServices>元素中删除名称空间前缀,使该名称空间成为默认名称,并调整其余元素的前缀,但这也不起作用:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Edmx Version="1.0" xmlns="http://schemas.microsoft.com/ado/2007/06/edmx" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:edm="http://schemas.microsoft.com/ado/2008/09/edm">
  <DataServices m:DataServiceVersion="1.0">
    <edm:Schema Namespace="(...)">
      <!-- ... -->
    </edm:Schema>
  </DataServices>
</Edmx>
Run Code Online (Sandbox Code Playgroud)

Lar*_*ann 2

好的,看来问题可能出在服务公开的 OData 版本上,即OData v1.0edm定义的命名空间是http://schemas.microsoft.com/ado/2006/04/edm. 请参阅OData 版本 4.0 第 3 部分:通用架构定义语言 (CSDL),\xc2\xa72.2

\n\n
\n

定义 OData 服务公开的实体模型的元素和属性通过实体数据模型命名空间进行限定:

\n\n \n\n

CSDL 的早期版本使用以下 EDM 命名空间:

\n\n \n
\n\n

使用Visual Studio 2013 中的“添加服务引用”工具(可以选择安装此更新)可以解决为此 OData 服务生成客户端代码的问题。

\n