Uploaded image for project: 'OASIS Open Data Protocol (OData) TC'
  1. OASIS Open Data Protocol (OData) TC
  2. ODATA-606

Specify navigation property binding combined with containment

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Duplicate
    • Affects Version/s: V4.0_OS
    • Fix Version/s: V4.01_WD01
    • Component/s: None
    • Labels:
      None
    • Environment:

      [Proposed]

      Description

      This combination is not explicitly covered in the specification.

      There are two sides to this problem:

      • target entity sets for contained entities
      • contained entity sets as target entity sets

      The first problem can be solved by allowing <NavigationPropertyBinding> elements as children of <NavigationProperty> elements that specify ContainsTarget="true":
      <NavigationProperty Name="Items" Type="Collection(Model.OrderItem)" ContainsTarget="true">
      <NavigationPropertyBinding Path="Product" Target="Model.Container/Products"/>
      </NavigationProperty>

      The second problem is trickier: assume an Order contains Items and Shipments, and an Item refers to a single Shipment of the same Order and vice versa. Using paths that start at the type defining the containment navigation property, the Target would be "Shipments" and "Items".
      <EntityType Name="Order">
      <NavigationProperty Name="Items" Type="Collection(Model.OrderItem)" ContainsTarget="true">
      <NavigationPropertyBinding Path="Shipment" Target="Shipments"/>
      </NavigationProperty>
      <NavigationProperty Name="Shipments" Type="Collection(Model.Shipment)" ContainsTarget="true">
      <NavigationPropertyBinding Path="ShippedItems" Target="Items"/>
      </NavigationProperty>
      </EntityType>

      <EntityType Name="OrderItem">
      <NavigationProperty Name="Shipment" Type="Model.Shipment" Partner="ShippedItems"/>
      </EntityType>

      Slightly more complicated: Region contains SalesPeople and Customers, Customer has SalesRep that is a sales person from the same region. A Target can only be specified if Customer has an upward navigation to the containing Region: Target="Region/SalesPeople".

      So target paths are either relative and start with a sibling of the parent (navigation property within the same type, entity set within the same container) or absolute and start with a qualified schema name.

        Attachments

          Activity

            People

            • Assignee:
              handl Ralf Handl
              Reporter:
              handl Ralf Handl
            • Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: