2016-08-24 2 views
0

У меня есть простая служба WebAPI2, которая использует OData (Microsoft.AspNet.OData v5.9.1, Microsoft.AspNet.WebApi v5.2.3). Я получаю документ ниже метаданных из ссылки api/$ metadata.Добавление атрибутов EntityTypes или свойств в метаданных OData

<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. Это может быть ответ, но я не знаю, как его использовать. С помощью этого примера можно добавить аннотации к метаданным, но это ограничено. Не точно соответствуют моим требованиям.

ответ

1

О вопросе 1, кажется, трудно изменить это, вы можете только новое это нравится:

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

О вопросе 2, этот документ может помочь вам использовать функцию: http://odata.github.io/odata.net/#02-07-define-annotations

 Смежные вопросы

  • Нет связанных вопросов^_^