0

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

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

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

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

4

1 回答 1

1

对于你的问题:

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

答案是肯定的。

让我从以下几个方面说明形式:

  1. OData v4 CSDL 规范,它说:

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

  1. 多重性是 OData V3 规范中的概念。您可以从此处找到定义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(表示集合,而集合始终不可为空)

所以,我说是的。


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

希望它可以帮助你。谢谢。

于 2015-10-22T01:59:02.753 回答