我需要创建一个以OData V2格式发布数据的服务,因为使用该数据的系统仅接受此格式。 我创建了一个基于WEB API 2和EF的项目,该项目正在运行,但版本为3。 经过研究,我发现可以使用以下代码更改该版本:
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
var odataVersion2 = new Version(1, 0);
builder.DataServiceVersion = odataVersion2;
builder.MaxDataServiceVersion = odataVersion2;
edmx文件已更改
<edmx:DataServices m:DataServiceVersion="1.0" m:MaxDataServiceVersion="1.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
但是架构似乎是错误的。 例如,我有一个来自Northwind OData服务
<Schema Namespace="NorthwindModel" 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 Namespace="ODataServer.Models" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
是否有任何方法可以真正表明OData服务必须遵循V2规范? 还是要强制使用正确的架构?
先谢谢您。 阿德里安
答案 0 :(得分:0)
嗯,我能够解决问题。 方法“注册”应如下所示:
public static void Register(HttpConfiguration config)
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
//Declare entities
builder.EntitySet<Empleado>("Empleados");
//Define verion
Version odataVersion2 = new Version(2, 0);
builder.DataServiceVersion = odataVersion2;
builder.MaxDataServiceVersion = odataVersion2;
IEdmModel edmModel = builder.GetEdmModel();
edmModel.SetEdmVersion(odataVersion2);
edmModel.SetEdmxVersion(odataVersion2);
config.Routes.MapODataServiceRoute("odata", "odata", edmModel);
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
现在EDMX具有所需的架构。
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
<edmx:DataServices m:DataServiceVersion="2.0" m:MaxDataServiceVersion="2.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<Schema Namespace="ODataServer.Models" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<EntityType Name="Empleado">
<Key>
<PropertyRef Name="EmpleadoID" />
</Key>
<Property Name="EmpleadoID" Type="Edm.Int32" Nullable="false" />
<Property Name="NroLegajo" Type="Edm.Int32" Nullable="false" />
<Property Name="ApeNom" Type="Edm.String" Nullable="false" />
<Property Name="FecIngreso" Type="Edm.DateTime" Nullable="false" />
<Property Name="Email" Type="Edm.String" Nullable="false" />
<Property Name="Proyecto" Type="Edm.String" />
</EntityType>
</Schema>
<Schema Namespace="Default" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<EntityContainer Name="Container" m:IsDefaultEntityContainer="true">
<EntitySet Name="Empleados" EntityType="ODataServer.Models.Empleado" />
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>