private static EdmModel CreateCustomerProductsModel() { var model = new EdmModel(); var container = new EdmEntityContainer("defaultNamespace", "DefaultContainer"); model.AddElement(container); var productType = new EdmEntityType("defaultNamespace", "Product"); model.AddElement(productType); var customerType = new EdmEntityType("defaultNamespace", "Customer"); customerType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "Products", Target = productType, TargetMultiplicity = EdmMultiplicity.Many }); productType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "Customers", Target = customerType, TargetMultiplicity = EdmMultiplicity.Many }); model.AddElement(customerType); var productSet = new EdmEntitySet( container, "Products", productType); container.AddElement(productSet); var customerSet = new EdmEntitySet( container, "Customers", customerType); var productsNavProp = customerType.NavigationProperties().Single(np => np.Name == "Products"); customerSet.AddNavigationTarget(productsNavProp, productSet); container.AddElement(customerSet); return model; }
private static void AddNavigationBindings(EntitySetConfiguration configuration, EdmEntitySet entitySet, EntitySetLinkBuilderAnnotation linkBuilder, ODataModelBuilder builder, Dictionary<Type, IEdmStructuredType> edmTypeMap, Dictionary<string, EdmEntitySet> edmEntitySetMap) { foreach (EntityTypeConfiguration entity in builder.ThisAndBaseAndDerivedTypes(configuration.EntityType)) { foreach (NavigationPropertyConfiguration navigation in entity.NavigationProperties) { NavigationPropertyBinding binding = configuration.FindBinding(navigation); if (binding != null) { EdmEntityType edmEntityType = edmTypeMap[entity.ClrType] as EdmEntityType; IEdmNavigationProperty edmNavigationProperty = edmEntityType.NavigationProperties().Single(np => np.Name == navigation.Name); entitySet.AddNavigationTarget(edmNavigationProperty, edmEntitySetMap[binding.EntitySet.Name]); Func<EntityInstanceContext, IEdmNavigationProperty, Uri> linkBuilderFunc = configuration.GetNavigationPropertyLink(navigation); if (linkBuilderFunc != null) { linkBuilder.AddNavigationPropertyLinkBuilder(edmNavigationProperty, linkBuilderFunc); } } } } }