OData创建所需的导航属性

时间:2015-10-19 09:07:52

标签: c# asp.net-web-api odata odata-v4

使用OData,我们可以将结构属性的IsNullable值设置为false,以表示需要属性。

是否可以为导航属性执行类似的操作?

我在TargetMultiplicity上找到EdmNavigationPropertyInfo属性,可以将其设置为EdmMultiplicity.One之类的值。我认为这会使它成为必需(并且可能在引擎盖下),但元数据中似乎没有任何东西表明它不可为空,因此消费者不会知道它是必需的。

我在运行时从数据库构建元数据和对象,而不是使用具体类型。

1 个答案:

答案 0 :(得分:1)

对于你的问题:

是否可以为导航属性执行类似操作?

答案绝对是

让我说明以下几个方面:

  1. 来自OData v4 CSDL spec,它说:
  2. edm:NavigationProperty元素可以包含Nullable属性,其布尔值指定导航属性是否需要导航目标。 ....

    1. 多重性是OData V3规范中的概念。你可以从here找到 10.2.3 the edm:Multiplicity Attribute 的定义。因为OData V4的实现是从OData V3库迁移的。因此,在OData V4库中重用(不更改)相同的定义。但是,它应该从OData V4库中删除。

    2. OData v4 lib implementation,您可以找到以下映射:

      a)EdmMultiplicity.ZeroOrOne(IsNullable = true)

      b)EdmMultiplicity.One(IsNullable = false)

      c)EdmMultiplicity.Many(表示集合,而集合总是不可为空)

    3. 所以,我说是的。

      让我举例说明: 如果您尝试OData示例服务:http://services.odata.org/v4/TrippinService/ $ metadata,则可以找到导航属性的 Nullable 属性。

      -     

      <Property Name="FlightNumber" Nullable="false" Type="Edm.String"/>
      
      <NavigationProperty Name="From" Nullable="false" Type="Microsoft.OData.SampleService.Models.TripPin.Airport"/>
      
      <NavigationProperty Name="To" Nullable="false" Type="Microsoft.OData.SampleService.Models.TripPin.Airport"/>
      
      <NavigationProperty Name="Airline" Nullable="false" Type="Microsoft.OData.SampleService.Models.TripPin.Airline"/>
      
      </EntityType>
      

      希望它可以帮到你。感谢。