向OData元数据中的EntityTypes或Properties添加属性

本文关键字:Properties 添加 属性 EntityTypes OData 元数据 | 更新日期: 2023-09-27 18:03:48

我有一个简单的WebAPI2服务,它使用OData (Microsoft.AspNet)。OData v5.9.1, microsoft . asp.net . webapi v5.2.3)。我从api/$metadata link得到下面的元数据文档。

<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)如果我使用实体框架数据库第一方法创建我的实体,我可以使用列长度,精度和比例值来分配属性吗?

我发现了什么;

1)一个封闭的OData问题。这个问题似乎与我有关,但我找不到SetNamespacePrefixMappings()函数或类似的任何地方。这个函数来自Microsoft.Data.Edm,但我的项目有Microsoft.Data.Edm v6.15.0参考

2) odata.org上一篇关于词汇表的文章和一个示例。这可能是答案,但我不知道如何使用它们。在这个示例中,可以向元数据添加注释,但这是有限的。不完全符合我的要求

向OData元数据中的EntityTypes或Properties添加属性

关于问题1,似乎很难修改,你只能像这样修改:

new EdmBinaryTypeReference(
       (IEdmPrimitiveType)primitiveTypeReference.Definition,
       primitiveTypeReference.IsNullable,
       false,
       maxLength);

关于问题2,这个文档可以帮助你使用这个特性:http://odata.github.io/odata.net/#02-07-define-annotations