使用 OData 创建所需的导航 属性

Required navigation property with OData create

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

是否可以为导航做类似的事情属性?

我在 EdmNavigationPropertyInfo 上找到了 TargetMultiplicity 属性,可以将其设置为 EdmMultiplicity.One 等值。我假设这会使它成为必需的(并且可能在幕后做)但元数据中似乎没有任何内容表明它不可为空,因此消费者不会知道它是必需的。

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

你的问题:

是否可以为导航做类似的事情属性?

答案绝对.

我从以下几个方面来说明:

  1. 来自OData v4 CSDL spec,它说:

edm:NavigationProperty 元素可以包含 Nullable 属性,其布尔值指定导航 属性 是否需要导航目标。 ....

  1. Multiplicity 是 OData V3 规范中的概念。您可以从 here 中找到 10.2.3 edm:Multiplicity 属性 的定义。因为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(表示集合,而集合始终不可为空)

所以,我说是。


让我举个例子: 如果您尝试 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>

希望对您有所帮助。谢谢。