diff --git a/sample/ODataDynamicModel/Extensions/EntitySetWithKeyTemplateSegment.cs b/sample/ODataDynamicModel/Extensions/EntitySetWithKeyTemplateSegment.cs index 36482af34..3f2bb88fc 100644 --- a/sample/ODataDynamicModel/Extensions/EntitySetWithKeyTemplateSegment.cs +++ b/sample/ODataDynamicModel/Extensions/EntitySetWithKeyTemplateSegment.cs @@ -65,7 +65,6 @@ public override bool TryTranslate(ODataTemplateTranslateContext context) KeySegment keySegment = new KeySegment(keysValues, entityType, entitySet.EntitySet); - context.Segments.Add(entitySet); context.Segments.Add(keySegment); return true; diff --git a/sample/ODataDynamicModel/Extensions/MyDataSource.cs b/sample/ODataDynamicModel/Extensions/MyDataSource.cs index cbdef987d..f232f20d8 100644 --- a/sample/ODataDynamicModel/Extensions/MyDataSource.cs +++ b/sample/ODataDynamicModel/Extensions/MyDataSource.cs @@ -37,8 +37,7 @@ public virtual IEdmModel GetEdmModel() detailInfo.AddKeys(detailInfo.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32)); detailInfo.AddStructuralProperty("Title", EdmPrimitiveTypeKind.String); model.AddElement(detailInfo); - EdmEntitySet detailInfos = container.AddEntitySet("DetailInfos", product); - + EdmEntitySet detailInfos = container.AddEntitySet("DetailInfos", detailInfo); EdmNavigationProperty detailInfoNavProp = product.AddUnidirectionalNavigation( new EdmNavigationPropertyInfo { @@ -47,8 +46,18 @@ public virtual IEdmModel GetEdmModel() Target = detailInfo }); products.AddNavigationTarget(detailInfoNavProp, detailInfos); - _edmModel = model; - return _edmModel; + + // Add a contained navigation property + product.AddUnidirectionalNavigation( + new EdmNavigationPropertyInfo + { + Name = "ContainedDetailInfo", + TargetMultiplicity = EdmMultiplicity.One, + Target = detailInfo, + ContainsTarget = true + }); + _edmModel = model; + return _edmModel; } public void Get(IEdmEntityTypeReference entityType, EdmEntityObjectCollection collection) @@ -57,12 +66,14 @@ public void Get(IEdmEntityTypeReference entityType, EdmEntityObjectCollection co entity.TrySetPropertyValue("Name", "abc"); entity.TrySetPropertyValue("ID", 1); entity.TrySetPropertyValue("DetailInfo", CreateDetailInfo(88, "abc_detailinfo", entity.ActualEdmType)); + entity.TrySetPropertyValue("ContainedDetailInfo", CreateContainedDetailInfo(88, "abc_containeddetailinfo", entity.ActualEdmType)); collection.Add(entity); entity = new EdmEntityObject(entityType); entity.TrySetPropertyValue("Name", "def"); entity.TrySetPropertyValue("ID", 2); entity.TrySetPropertyValue("DetailInfo", CreateDetailInfo(99, "def_detailinfo", entity.ActualEdmType)); + entity.TrySetPropertyValue("ContainedDetailInfo", CreateContainedDetailInfo(99, "def_containeddetailinfo", entity.ActualEdmType)); collection.Add(entity); } @@ -72,6 +83,7 @@ public void Get(string key, EdmEntityObject entity) entity.TrySetPropertyValue("Name", "abc"); entity.TrySetPropertyValue("ID", int.Parse(key)); entity.TrySetPropertyValue("DetailInfo", CreateDetailInfo(88, "abc_detailinfo", entity.ActualEdmType)); + entity.TrySetPropertyValue("ContainedDetailInfo", CreateContainedDetailInfo(88, "abc_containeddetailinfo", entity.ActualEdmType)); } public object GetProperty(string property, EdmEntityObject entity) @@ -94,5 +106,19 @@ private IEdmEntityObject CreateDetailInfo(int id, string title, IEdmStructuredTy entity.TrySetPropertyValue("Title", title); return entity; } + + private IEdmEntityObject CreateContainedDetailInfo(int id, string title, IEdmStructuredType edmType) + { + IEdmNavigationProperty navigationProperty = edmType.DeclaredProperties.OfType().FirstOrDefault(e => e.Name == "ContainedDetailInfo"); + if (navigationProperty == null) + { + return null; + } + + EdmEntityObject entity = new EdmEntityObject(navigationProperty.ToEntityType()); + entity.TrySetPropertyValue("ID", id); + entity.TrySetPropertyValue("Title", title); + return entity; + } } } diff --git a/sample/ODataDynamicModel/Extensions/NavigationTemplateSegment.cs b/sample/ODataDynamicModel/Extensions/NavigationTemplateSegment.cs index cf8ce7694..099e137a1 100644 --- a/sample/ODataDynamicModel/Extensions/NavigationTemplateSegment.cs +++ b/sample/ODataDynamicModel/Extensions/NavigationTemplateSegment.cs @@ -38,7 +38,7 @@ public override bool TryTranslate(ODataTemplateTranslateContext context) var navigationSource = keySegment.NavigationSource; IEdmNavigationSource targetNavigationSource = navigationSource.FindNavigationTarget(navigationProperty); - NavigationPropertySegment seg = new NavigationPropertySegment(navigationProperty, navigationSource); + NavigationPropertySegment seg = new NavigationPropertySegment(navigationProperty, targetNavigationSource); context.Segments.Add(seg); return true; }