【问题标题】:Required navigation property with OData create使用 OData 创建所需的导航属性
【发布时间】:2016-01-17 13:45:30
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您是否尝试使用DataAnnotations 属性[Required]
  • @MegaTron 我不确定你的意思。您的意思是自定义注释说它是必需的吗?
  • 如果我理解你的意思,我的意思是如果你想做导航属性,那么你可以使用 DataAnnotations RequiredAttribute class
  • @MegaTron 我在运行时从数据库构建我的元数据和对象,而不是使用具体类型,所以我认为我不能使用它。我刚刚更新了我的问题以反映这一点,抱歉。

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


【解决方案1】:

你的问题:

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

答案绝对是是的

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

  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>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多