Skip to content

Commit

Permalink
update dynamic sample (#975)
Browse files Browse the repository at this point in the history
  • Loading branch information
ElizabethOkerio committed Jul 4, 2023
1 parent ea97f91 commit 45b140b
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
34 changes: 30 additions & 4 deletions sample/ODataDynamicModel/Extensions/MyDataSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand All @@ -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)
Expand All @@ -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);
}
Expand All @@ -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)
Expand All @@ -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<EdmNavigationProperty>().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;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit 45b140b

Please sign in to comment.