public void Apply(IEntitySetConfiguration configuration, ODataModelBuilder model) { if (configuration == null) { throw Error.ArgumentNull("configuration"); } foreach (NavigationPropertyConfiguration property in configuration.EntityType.NavigationProperties) { if (configuration.GetNavigationPropertyLink(property.Name) == null) { configuration.HasNavigationPropertyLink( property, (entityContext, navigationProperty) => { string route = PropertyNavigationRouteName ?? ODataRouteNames.PropertyNavigation; string link = entityContext.UrlHelper.Link( route, new { Controller = configuration.Name, ParentId = ConventionsHelpers.GetEntityKeyValue(entityContext, configuration.EntityType), NavigationProperty = navigationProperty.Name }); if (link == null) { throw Error.InvalidOperation(SRResources.NavigationPropertyRouteMissingOrIncorrect, navigationProperty.Name, ODataRouteNames.PropertyNavigation); } return(new Uri(link)); }); } } }
internal static Uri GenerateSelfLink(IEntitySetConfiguration configuration, EntityInstanceContext entityContext, bool includeCast) { string routeName; Dictionary<string, object> routeValues = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase); routeValues.Add(LinkGenerationConstants.Controller, configuration.Name); routeValues.Add(LinkGenerationConstants.Id, ConventionsHelpers.GetEntityKeyValue(entityContext, configuration.EntityType)); if (includeCast) { routeName = ODataRouteNames.GetByIdWithCast; routeValues.Add(LinkGenerationConstants.Entitytype, entityContext.EntityType.FullName()); } else { routeName = ODataRouteNames.GetById; } string editLink = entityContext.UrlHelper.Link(routeName, routeValues); if (editLink == null) { throw Error.InvalidOperation(SRResources.GetByIdRouteMissingOrIncorrect, routeName); } return new Uri(editLink); }
public void Apply(IEntitySetConfiguration configuration, ODataModelBuilder model) { if (configuration == null) { throw Error.ArgumentNull("configuration"); } foreach (NavigationPropertyConfiguration property in configuration.EntityType.NavigationProperties) { if (configuration.GetNavigationPropertyLink(property.Name) == null) { configuration.HasNavigationPropertyLink( property, (entityContext, navigationProperty) => { string route = PropertyNavigationRouteName ?? ODataRouteNames.PropertyNavigation; string link = entityContext.UrlHelper.Link( route, new { Controller = configuration.Name, ParentId = ConventionsHelpers.GetEntityKeyValue(entityContext, configuration.EntityType), NavigationProperty = navigationProperty.Name }); if (link == null) { throw Error.InvalidOperation(SRResources.NavigationPropertyRouteMissingOrIncorrect, navigationProperty.Name, ODataRouteNames.PropertyNavigation); } return new Uri(link); }); } } }
public void Apply(IEntitySetConfiguration configuration, ODataModelBuilder model) { if (configuration == null) { throw Error.ArgumentNull("configuration"); } // We only need to configure the EditLink by convention, ReadLink and IdLink both delegate to EditLink if (configuration.GetEditLink() == null) { configuration.HasEditLink(entityContext => { string routeName = SelfRouteName ?? ODataRouteNames.GetById; string editlink = entityContext.UrlHelper.Link( routeName, new { controller = configuration.Name, id = ConventionsHelpers.GetEntityKeyValue(entityContext, configuration.EntityType) }); if (editlink == null) { throw Error.InvalidOperation(SRResources.GetByIdRouteMissingOrIncorrect, routeName); } return new Uri(editlink); }); } }
public void Apply(IEntitySetConfiguration configuration, ODataModelBuilder model) { if (configuration == null) { throw Error.ArgumentNull("configuration"); } // generate links without cast for declared and inherited navigation properties foreach (IEntityTypeConfiguration entity in configuration.EntityType.ThisAndBaseTypes()) { foreach (NavigationPropertyConfiguration property in entity.NavigationProperties) { if (configuration.GetNavigationPropertyLink(property) == null) { configuration.HasNavigationPropertyLink( property, (entityContext, navigationProperty) => GenerateNavigationPropertyLink(entityContext, navigationProperty, configuration, includeCast: false)); } } } // generate links with cast for navigation properties in derived types. foreach (IEntityTypeConfiguration entity in model.DerivedTypes(configuration.EntityType)) { foreach (NavigationPropertyConfiguration property in entity.NavigationProperties) { if (configuration.GetNavigationPropertyLink(property) == null) { configuration.HasNavigationPropertyLink( property, (entityContext, navigationProperty) => GenerateNavigationPropertyLink(entityContext, navigationProperty, configuration, includeCast: true)); } } } }
public void AssociationSetDiscoveryConvention_AddsBindingForBaseAndDerivedNavigationProperties() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); IEntityTypeConfiguration vehicle = builder.AddEntity(typeof(Vehicle)); IEntityTypeConfiguration car = builder.AddEntity(typeof(Car)).DerivesFrom(vehicle); NavigationPropertyConfiguration carNavigationProperty = car.AddNavigationProperty(typeof(Car).GetProperty("Manufacturer"), EdmMultiplicity.ZeroOrOne); IEntityTypeConfiguration motorcycle = builder.AddEntity(typeof(Motorcycle)).DerivesFrom(vehicle); NavigationPropertyConfiguration motorcycleNavigationProperty = motorcycle.AddNavigationProperty(typeof(Motorcycle).GetProperty("Manufacturer"), EdmMultiplicity.ZeroOrOne); IEntityTypeConfiguration manufacturer = builder.AddEntity(typeof(Manufacturer)); IEntityTypeConfiguration motorcycleManufacturer = builder.AddEntity(typeof(MotorcycleManufacturer)).DerivesFrom(manufacturer); IEntityTypeConfiguration carManufacturer = builder.AddEntity(typeof(CarManufacturer)).DerivesFrom(manufacturer); IEntitySetConfiguration manufacturers = builder.AddEntitySet("manufacturers", manufacturer); Mock <IEntitySetConfiguration> entitySet = new Mock <IEntitySetConfiguration>(MockBehavior.Strict); entitySet.Setup(v => v.EntityType).Returns(vehicle); entitySet.Setup(v => v.AddBinding(motorcycleNavigationProperty, manufacturers)).Returns <NavigationPropertyConfiguration>(null); entitySet.Setup(v => v.AddBinding(carNavigationProperty, manufacturers)).Returns <NavigationPropertyConfiguration>(null); // Act _convention.Apply(entitySet.Object, builder); // Assert entitySet.VerifyAll(); }
public void CanCreateActionWithEntityReturnType() { // Arrange // Act ODataModelBuilder builder = new ODataModelBuilder(); ActionConfiguration createGoodCustomer = new ActionConfiguration(builder, "CreateGoodCustomer"); createGoodCustomer.ReturnsFromEntitySet <Customer>("GoodCustomers"); ActionConfiguration createBadCustomers = new ActionConfiguration(builder, "CreateBadCustomers"); createBadCustomers.ReturnsCollectionFromEntitySet <Customer>("BadCustomers"); // Assert IEntityTypeConfiguration customer = createGoodCustomer.ReturnType as IEntityTypeConfiguration; Assert.NotNull(customer); Assert.Equal(typeof(Customer).FullName, customer.FullName); IEntitySetConfiguration goodCustomers = builder.EntitySets.SingleOrDefault(s => s.Name == "GoodCustomers"); Assert.NotNull(goodCustomers); Assert.Same(createGoodCustomer.EntitySet, goodCustomers); ICollectionTypeConfiguration customers = createBadCustomers.ReturnType as ICollectionTypeConfiguration; Assert.NotNull(customers); customer = customers.ElementType as IEntityTypeConfiguration; Assert.NotNull(customer); IEntitySetConfiguration badCustomers = builder.EntitySets.SingleOrDefault(s => s.Name == "BadCustomers"); Assert.NotNull(badCustomers); Assert.Same(createBadCustomers.EntitySet, badCustomers); }
public void Apply(IEntitySetConfiguration configuration, ODataModelBuilder model) { if (configuration == null) { throw Error.ArgumentNull("configuration"); } // We only need to configure the EditLink by convention, ReadLink and IdLink both delegate to EditLink if (configuration.GetEditLink() == null) { configuration.HasEditLink(entityContext => { string routeName = SelfRouteName ?? ODataRouteNames.GetById; string editlink = entityContext.UrlHelper.Link( routeName, new { controller = configuration.Name, id = ConventionsHelpers.GetEntityKeyValue(entityContext, configuration.EntityType) }); if (editlink == null) { throw Error.InvalidOperation(SRResources.GetByIdRouteMissingOrIncorrect, routeName); } return(new Uri(editlink)); }); } }
internal static Uri GenerateSelfLink(IEntitySetConfiguration configuration, EntityInstanceContext entityContext, bool includeCast) { string routeName; Dictionary <string, object> routeValues = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase); routeValues.Add(LinkGenerationConstants.Controller, configuration.Name); routeValues.Add(LinkGenerationConstants.Id, ConventionsHelpers.GetEntityKeyValue(entityContext, configuration.EntityType)); if (includeCast) { routeName = ODataRouteNames.GetByIdWithCast; routeValues.Add(LinkGenerationConstants.Entitytype, entityContext.EntityType.FullName()); } else { routeName = ODataRouteNames.GetById; } string editLink = entityContext.UrlHelper.Link(routeName, routeValues); if (editLink == null) { throw Error.InvalidOperation(SRResources.GetByIdRouteMissingOrIncorrect, routeName); } return(new Uri(editLink)); }
public override IEntitySetConfiguration AddEntitySet(string name, IEntityTypeConfiguration entityType) { IEntitySetConfiguration entitySetConfiguration = base.AddEntitySet(name, entityType); if (_isModelBeingBuilt) { ApplyEntitySetConventions(entitySetConfiguration); } return(entitySetConfiguration); }
public void GetTargetEntitySet_Returns_Null_IfNoMatchingTargetEntitySet() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); IEntityTypeConfiguration motorcycle = builder.AddEntity(typeof(Motorcycle)); NavigationPropertyConfiguration navigationProperty = motorcycle.AddNavigationProperty(typeof(Motorcycle).GetProperty("Manufacturer"), EdmMultiplicity.ZeroOrOne); // Act IEntitySetConfiguration targetEntitySet = AssociationSetDiscoveryConvention.GetTargetEntitySet(navigationProperty, builder); // Assert Assert.Null(targetEntitySet); }
public void Apply(IEntitySetConfiguration configuration, ODataModelBuilder model) { foreach (IEntityTypeConfiguration entity in model.ThisAndBaseAndDerivedTypes(configuration.EntityType)) { foreach (NavigationPropertyConfiguration navigationProperty in entity.NavigationProperties) { IEntitySetConfiguration targetEntitySet = GetTargetEntitySet(navigationProperty, model); if (targetEntitySet != null) { configuration.AddBinding(navigationProperty, targetEntitySet); } } } }
public EntitySetLinkBuilderAnnotation(IEntitySetConfiguration entitySet) { if (entitySet == null) { throw Error.ArgumentNull("entitySet"); } _entitySet = entitySet; _feedSelfLinkBuilder = entitySet.GetFeedSelfLink(); _idLinkBuilder = entitySet.GetIdLink(); _editLinkBuilder = entitySet.GetEditLink(); _readLinkBuilder = entitySet.GetReadLink(); _navigationPropertyLinkBuilderLookup = new Dictionary<IEdmNavigationProperty, Func<EntityInstanceContext, IEdmNavigationProperty, Uri>>(); }
public EntitySetLinkBuilderAnnotation(IEntitySetConfiguration entitySet) { if (entitySet == null) { throw Error.ArgumentNull("entitySet"); } _entitySet = entitySet; _feedSelfLinkBuilder = entitySet.GetFeedSelfLink(); _idLinkBuilder = entitySet.GetIdLink(); _editLinkBuilder = entitySet.GetEditLink(); _readLinkBuilder = entitySet.GetReadLink(); _navigationPropertyLinkBuilderLookup = new Dictionary <IEdmNavigationProperty, Func <EntityInstanceContext, IEdmNavigationProperty, Uri> >(); }
private void ApplyEntitySetConventions(IEntitySetConfiguration entitySetConfiguration) { if (!_configuredEntitySets.Contains(entitySetConfiguration)) { _configuredEntitySets.Add(entitySetConfiguration); foreach (IEntitySetConvention convention in _conventions.OfType <IEntitySetConvention>()) { if (convention != null) { convention.Apply(entitySetConfiguration, this); } } } }
public static IEntitySetConfiguration CreateOrReuseEntitySet <TElementEntityType>(ODataModelBuilder builder, string entitySetName) where TElementEntityType : class { IEntitySetConfiguration entitySet = builder.EntitySets.SingleOrDefault(s => s.Name == entitySetName); if (entitySet == null) { builder.EntitySet <TElementEntityType>(entitySetName); entitySet = builder.EntitySets.Single(s => s.Name == entitySetName); } else { builder.Entity <TElementEntityType>(); } return(entitySet); }
public EntitySetConfiguration(ODataModelBuilder modelBuilder, IEntitySetConfiguration configuration) { if (modelBuilder == null) { throw Error.ArgumentNull("modelBuilder"); } if (configuration == null) { throw Error.ArgumentNull("configuration"); } _configuration = configuration; _modelBuilder = modelBuilder; _entityType = new EntityTypeConfiguration <TEntityType>(modelBuilder, _configuration.EntityType); }
public void GetTargetEntitySet_Returns_BaseTypeEntitySet_IfNoMatchingEntitysetForCurrentType() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); IEntityTypeConfiguration motorcycle = builder.AddEntity(typeof(Motorcycle)); IEntityTypeConfiguration manufacturer = builder.AddEntity(typeof(Manufacturer)); IEntityTypeConfiguration motorcycleManufacturer = builder.AddEntity(typeof(MotorcycleManufacturer)).DerivesFrom(manufacturer); NavigationPropertyConfiguration navigationProperty = motorcycle.AddNavigationProperty(typeof(Motorcycle).GetProperty("Manufacturer"), EdmMultiplicity.ZeroOrOne); IEntitySetConfiguration manufacturers = builder.AddEntitySet("manufacturers", manufacturer); // Act IEntitySetConfiguration targetEntitySet = AssociationSetDiscoveryConvention.GetTargetEntitySet(navigationProperty, builder); // Assert Assert.Equal(manufacturers, targetEntitySet); }
public void Apply(IEntitySetConfiguration configuration, ODataModelBuilder model) { if (configuration == null) { throw Error.ArgumentNull("configuration"); } // Configure the self link for the feed if (configuration.GetFeedSelfLink() == null) { configuration.HasFeedSelfLink(entitySetContext => { string routeName = ODataRouteNames.Default; string selfLink = entitySetContext.UrlHelper.Link( routeName, new { controller = configuration.Name }); if (selfLink == null) { throw Error.InvalidOperation(SRResources.DefaultRouteMissingOrIncorrect, routeName); } return new Uri(selfLink); }); } // We only need to configure the EditLink by convention, ReadLink and IdLink both delegate to EditLink if (configuration.GetEditLink() == null) { bool derivedTypesDefineNavigationProperty = model.DerivedTypes(configuration.EntityType).Any(e => e.NavigationProperties.Any()); // generate links with cast if any of the derived types define a navigation property if (derivedTypesDefineNavigationProperty) { configuration.HasEditLink((entityContext) => GenerateSelfLink(configuration, entityContext, includeCast: true)); } else { configuration.HasEditLink((entityContext) => GenerateSelfLink(configuration, entityContext, includeCast: false)); } } }
public void Apply(IEntitySetConfiguration configuration, ODataModelBuilder model) { if (configuration == null) { throw Error.ArgumentNull("configuration"); } // Configure the self link for the feed if (configuration.GetFeedSelfLink() == null) { configuration.HasFeedSelfLink(entitySetContext => { string routeName = ODataRouteNames.Default; string selfLink = entitySetContext.UrlHelper.Link( routeName, new { controller = configuration.Name }); if (selfLink == null) { throw Error.InvalidOperation(SRResources.DefaultRouteMissingOrIncorrect, routeName); } return(new Uri(selfLink)); }); } // We only need to configure the EditLink by convention, ReadLink and IdLink both delegate to EditLink if (configuration.GetEditLink() == null) { bool derivedTypesDefineNavigationProperty = model.DerivedTypes(configuration.EntityType).Any(e => e.NavigationProperties.Any()); // generate links with cast if any of the derived types define a navigation property if (derivedTypesDefineNavigationProperty) { configuration.HasEditLink((entityContext) => GenerateSelfLink(configuration, entityContext, includeCast: true)); } else { configuration.HasEditLink((entityContext) => GenerateSelfLink(configuration, entityContext, includeCast: false)); } } }
private static Dictionary <string, EdmEntitySet> AddEntitySets(this EdmModel model, IEnumerable <IEntitySetConfiguration> configurations, EdmEntityContainer container, Dictionary <string, IEdmStructuredType> edmTypeMap) { // build the entitysets and their annotations IEnumerable <Tuple <EdmEntitySet, IEntitySetConfiguration> > entitySets = AddEntitySets(configurations, container, edmTypeMap); var entitySetAndAnnotations = entitySets.Select(e => new { EntitySet = e.Item1, Configuration = e.Item2, Annotations = new { LinkBuilder = new EntitySetLinkBuilderAnnotation(e.Item2), Url = new EntitySetUrlAnnotation { Url = e.Item2.GetUrl() } } }).ToArray(); // index the entitySets by name Dictionary <string, EdmEntitySet> edmEntitySetMap = entitySetAndAnnotations.ToDictionary(e => e.EntitySet.Name, e => e.EntitySet); // apply the annotations foreach (var iter in entitySetAndAnnotations) { EdmEntitySet entitySet = iter.EntitySet; IEntitySetConfiguration configuration = iter.Configuration; model.SetAnnotationValue <EntitySetUrlAnnotation>(entitySet, iter.Annotations.Url); model.SetAnnotationValue <IEntitySetLinkBuilder>(entitySet, iter.Annotations.LinkBuilder); foreach (NavigationPropertyConfiguration navigation in configuration.EntityType.NavigationProperties) { NavigationPropertyBinding binding = configuration.FindBinding(navigation); if (binding != null) { EdmEntityType edmEntityType = edmTypeMap[configuration.EntityType.FullName] as EdmEntityType; IEdmNavigationProperty edmNavigationProperty = edmEntityType.NavigationProperties().Single(np => np.Name == navigation.Name); entitySet.AddNavigationTarget(edmNavigationProperty, edmEntitySetMap[binding.EntitySet.Name]); iter.Annotations.LinkBuilder.AddNavigationPropertyLinkBuilder(edmNavigationProperty, configuration.GetNavigationPropertyLink(edmNavigationProperty.Name)); } } } return(edmEntitySetMap); }
public void Apply_AddsNavigationLinkFor_AllBaseDeclaredAndDerivedProperties() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); IEntityTypeConfiguration vehicle = builder.AddEntity(typeof(Vehicle)); IEntityTypeConfiguration car = builder.AddEntity(typeof(Car)).DerivesFrom(vehicle); NavigationPropertyConfiguration carNavigationProperty = car.AddNavigationProperty(typeof(Car).GetProperty("Manufacturer"), EdmMultiplicity.ZeroOrOne); IEntityTypeConfiguration motorcycle = builder.AddEntity(typeof(Motorcycle)).DerivesFrom(vehicle); NavigationPropertyConfiguration motorcycleNavigationProperty = motorcycle.AddNavigationProperty(typeof(Motorcycle).GetProperty("Manufacturer"), EdmMultiplicity.ZeroOrOne); IEntityTypeConfiguration manufacturer = builder.AddEntity(typeof(Manufacturer)); IEntityTypeConfiguration motorcycleManufacturer = builder.AddEntity(typeof(MotorcycleManufacturer)).DerivesFrom(manufacturer); IEntityTypeConfiguration carManufacturer = builder.AddEntity(typeof(CarManufacturer)).DerivesFrom(manufacturer); IEntitySetConfiguration manufacturers = builder.AddEntitySet("manufacturers", manufacturer); Mock <IEntitySetConfiguration> entitySet = new Mock <IEntitySetConfiguration>(MockBehavior.Strict); entitySet.Setup(v => v.EntityType).Returns(vehicle); entitySet.Setup(v => v.GetNavigationPropertyLink(motorcycleNavigationProperty)).Returns <NavigationPropertyConfiguration>(null); entitySet.Setup(v => v.GetNavigationPropertyLink(carNavigationProperty)).Returns <NavigationPropertyConfiguration>(null); entitySet .Setup(v => v.HasNavigationPropertyLink(motorcycleNavigationProperty, It.IsAny <Func <EntityInstanceContext, IEdmNavigationProperty, Uri> >())) .Returns <IEntitySetConfiguration>(null); entitySet .Setup(v => v.HasNavigationPropertyLink(carNavigationProperty, It.IsAny <Func <EntityInstanceContext, IEdmNavigationProperty, Uri> >())) .Returns <IEntitySetConfiguration>(null); // Act _convention.Apply(entitySet.Object, builder); // Assert entitySet.VerifyAll(); }
private static void AddNavigationBindings(IEntitySetConfiguration configuration, EdmEntitySet entitySet, EntitySetLinkBuilderAnnotation linkBuilder, ODataModelBuilder builder, Dictionary <string, IEdmStructuredType> edmTypeMap, Dictionary <string, EdmEntitySet> edmEntitySetMap) { foreach (IEntityTypeConfiguration entity in builder.ThisAndBaseAndDerivedTypes(configuration.EntityType)) { foreach (NavigationPropertyConfiguration navigation in entity.NavigationProperties) { NavigationPropertyBinding binding = configuration.FindBinding(navigation); if (binding != null) { EdmEntityType edmEntityType = edmTypeMap[entity.FullName] 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); } } } } }
public NavigationPropertyBinding AddBinding(NavigationPropertyConfiguration navigationConfiguration, IEntitySetConfiguration targetEntitySet) { if (navigationConfiguration == null) { throw Error.ArgumentNull("navigationConfiguration"); } if (targetEntitySet == null) { throw Error.ArgumentNull("targetEntitySet"); } IEntityTypeConfiguration declaringEntityType = navigationConfiguration.DeclaringEntityType; if (!(declaringEntityType.IsAssignableFrom(EntityType) || EntityType.IsAssignableFrom(declaringEntityType))) { throw Error.InvalidOperation(SRResources.NavigationPropertyNotInHierarchy, declaringEntityType.FullName, EntityType.FullName, Name); } NavigationPropertyBinding navigationPropertyBinding = null; if (_entitySetBindings.ContainsKey(navigationConfiguration)) { navigationPropertyBinding = _entitySetBindings[navigationConfiguration]; if (navigationPropertyBinding.EntitySet != targetEntitySet) { throw Error.NotSupported(SRResources.RebindingNotSupported); } } else { navigationPropertyBinding = new NavigationPropertyBinding(navigationConfiguration, targetEntitySet); _entitySetBindings[navigationConfiguration] = navigationPropertyBinding; } return navigationPropertyBinding; }
public NavigationPropertyBinding(NavigationPropertyConfiguration navigationProperty, IEntitySetConfiguration entitySet) { NavigationProperty = navigationProperty; EntitySet = entitySet; _linkFactory = null; }
private void ApplyEntitySetConventions(IEntitySetConfiguration entitySetConfiguration) { if (!_configuredEntitySets.Contains(entitySetConfiguration)) { _configuredEntitySets.Add(entitySetConfiguration); foreach (IEntitySetConvention convention in _conventions.OfType<IEntitySetConvention>()) { if (convention != null) { convention.Apply(entitySetConfiguration, this); } } } }
public NavigationPropertyBinding AddBinding(NavigationPropertyConfiguration navigationConfiguration, IEntitySetConfiguration targetEntitySet) { NavigationPropertyBinding navigationPropertyBinding = null; if (_entitySetBindings.ContainsKey(navigationConfiguration)) { navigationPropertyBinding = _entitySetBindings[navigationConfiguration]; if (navigationPropertyBinding.EntitySet != targetEntitySet) { throw Error.NotSupported(SRResources.RebindingNotSupported); } } else { navigationPropertyBinding = new NavigationPropertyBinding(navigationConfiguration, targetEntitySet); _entitySetBindings[navigationConfiguration] = navigationPropertyBinding; } return navigationPropertyBinding; }
private static void AddNavigationBindings(IEntitySetConfiguration configuration, EdmEntitySet entitySet, EntitySetLinkBuilderAnnotation linkBuilder, ODataModelBuilder builder, Dictionary<string, IEdmStructuredType> edmTypeMap, Dictionary<string, EdmEntitySet> edmEntitySetMap) { foreach (IEntityTypeConfiguration entity in builder.ThisAndBaseAndDerivedTypes(configuration.EntityType)) { foreach (NavigationPropertyConfiguration navigation in entity.NavigationProperties) { NavigationPropertyBinding binding = configuration.FindBinding(navigation); if (binding != null) { EdmEntityType edmEntityType = edmTypeMap[entity.FullName] 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); } } } } }
private static EdmEntitySet AddEntitySet(this EdmEntityContainer container, IEntitySetConfiguration entitySet, IDictionary<string, IEdmStructuredType> edmTypeMap) { return container.AddEntitySet(entitySet.Name, (IEdmEntityType)edmTypeMap[entitySet.EntityType.FullName]); }
public NavigationPropertyBinding AddBinding(NavigationPropertyConfiguration navigationConfiguration, IEntitySetConfiguration targetEntitySet) { if (navigationConfiguration == null) { throw Error.ArgumentNull("navigationConfiguration"); } if (targetEntitySet == null) { throw Error.ArgumentNull("targetEntitySet"); } IEntityTypeConfiguration declaringEntityType = navigationConfiguration.DeclaringEntityType; if (!(declaringEntityType.IsAssignableFrom(EntityType) || EntityType.IsAssignableFrom(declaringEntityType))) { throw Error.InvalidOperation(SRResources.NavigationPropertyNotInHierarchy, declaringEntityType.FullName, EntityType.FullName, Name); } NavigationPropertyBinding navigationPropertyBinding = null; if (_entitySetBindings.ContainsKey(navigationConfiguration)) { navigationPropertyBinding = _entitySetBindings[navigationConfiguration]; if (navigationPropertyBinding.EntitySet != targetEntitySet) { throw Error.NotSupported(SRResources.RebindingNotSupported); } } else { navigationPropertyBinding = new NavigationPropertyBinding(navigationConfiguration, targetEntitySet); _entitySetBindings[navigationConfiguration] = navigationPropertyBinding; } return(navigationPropertyBinding); }
private static EdmEntitySet AddEntitySet(this EdmEntityContainer container, IEntitySetConfiguration entitySet, IDictionary <string, IEdmStructuredType> edmTypeMap) { return(container.AddEntitySet(entitySet.Name, (IEdmEntityType)edmTypeMap[entitySet.EntityType.FullName])); }
public NavigationPropertyBinding AddBinding(NavigationPropertyConfiguration navigationConfiguration, IEntitySetConfiguration targetEntitySet) { NavigationPropertyBinding navigationPropertyBinding = null; if (_entitySetBindings.ContainsKey(navigationConfiguration)) { navigationPropertyBinding = _entitySetBindings[navigationConfiguration]; if (navigationPropertyBinding.EntitySet != targetEntitySet) { throw Error.NotSupported(SRResources.RebindingNotSupported); } } else { navigationPropertyBinding = new NavigationPropertyBinding(navigationConfiguration, targetEntitySet); _entitySetBindings[navigationConfiguration] = navigationPropertyBinding; } return(navigationPropertyBinding); }