我有一个使用OData的简单WebAPI2服务(Microsoft.AspNet.OData v5.9.1,Microsoft.AspNet.WebApi v5.2.3)。我从api / $ metadata链接获得以下元数据文档。
<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
<edmx:DataServices>
<Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Global.Model">
<EntityType Name="Account">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Name="Id" Type="Edm.String" Nullable="false" />
<Property Name="ExtId" Type="Edm.String" />
<Property Name="CustomerId" Type="Edm.String" />
<Property Name="DivisionId" Type="Edm.String" />
<Property Name="Default" Type="Edm.Boolean" Nullable="false" />
<Property Name="Status" Type="Edm.Boolean" Nullable="false" />
<NavigationProperty Name="Customer" Type="Global.Model.Customer">
<ReferentialConstraint Property="CustomerId" ReferencedProperty="Id" />
</NavigationProperty>
</EntityType>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
我想修改此文档以将一些自定义属性返回给客户端。我无法找到关于这个问题的正确样本或教程。
我的问题是;
1)甚至可以修改如下的元数据;
<EntityType Name="Account" CustomAttribute="CustomValue">
<Property Name="Id" Type="Edm.String" Nullable="false" MaxLength="3" DisplayName="No" />
2)如果我使用Entity Framework Database First方法创建我的实体,我可以使用列长度,精度和比例值来分配属性吗?
到目前为止我发现了什么;
1)封闭的OData issue。这个问题似乎与我有关,但我无法在任何地方找到SetNamespacePrefixMappings()函数或类似函数。此函数来自Microsoft.Data.Edm,但我的项目有Microsoft.OData.Edm v6.15.0参考
2)关于odata.org和sample的词汇表的帖子。这可能是答案,但我不知道如何使用它们。使用此示例,可以向元数据添加注释,但这是有限的。不完全符合我的要求。
答案 0 :(得分:2)
关于问题1,似乎很难对其进行修改,你只能像以下那样对它进行修改:
new EdmBinaryTypeReference(
(IEdmPrimitiveType)primitiveTypeReference.Definition,
primitiveTypeReference.IsNullable,
false,
maxLength);
关于问题2,此文档可以帮助您使用该功能:http://odata.github.io/odata.net/#02-07-define-annotations