public void Apply(INavigationSourceConfiguration configuration, ODataModelBuilder model) { if (configuration == null) { throw Error.ArgumentNull("configuration"); } // Configure the self link for the feed EntitySetConfiguration entitySet = configuration as EntitySetConfiguration; if (entitySet != null && (entitySet.GetFeedSelfLink() == null)) { entitySet.HasFeedSelfLink(feedContext => { string selfLink = feedContext.Url.CreateODataLink(new EntitySetPathSegment(feedContext.EntitySetBase)); if (selfLink == null) { return(null); } return(new Uri(selfLink)); }); } if (configuration.GetIdLink() == null) { configuration.HasIdLink(new SelfLinkBuilder <Uri>((entityContext) => entityContext.GenerateSelfLink(includeCast: false), followsConventions: true)); } if (configuration.GetEditLink() == null) { bool derivedTypesDefineNavigationProperty = model.DerivedTypes(configuration.EntityType) .OfType <EntityTypeConfiguration>().Any(e => e.NavigationProperties.Any()); // generate links with cast if any of the derived types define a navigation property if (derivedTypesDefineNavigationProperty) { configuration.HasEditLink( new SelfLinkBuilder <Uri>( entityContext => entityContext.GenerateSelfLink(includeCast: true), followsConventions: true)); } else { configuration.HasEditLink( new SelfLinkBuilder <Uri>( entityContext => entityContext.GenerateSelfLink(includeCast: false), followsConventions: true)); } } }
public void Apply(INavigationSourceConfiguration configuration, ODataModelBuilder model) { foreach (EntityTypeConfiguration entity in model.ThisAndBaseAndDerivedTypes(configuration.EntityType)) { foreach (NavigationPropertyConfiguration navigationProperty in entity.NavigationProperties) { NavigationSourceConfiguration targetNavigationSource = GetTargetNavigationSource(navigationProperty, model); if (targetNavigationSource != null) { configuration.AddBinding(navigationProperty, targetNavigationSource); } } } }
public void Apply(INavigationSourceConfiguration configuration, ODataModelBuilder model) { if (configuration == null) { throw Error.ArgumentNull("configuration"); } // Configure the self link for the feed EntitySetConfiguration entitySet = configuration as EntitySetConfiguration; if (entitySet != null && (entitySet.GetFeedSelfLink() == null)) { entitySet.HasFeedSelfLink(feedContext => { string selfLink = feedContext.Url.CreateODataLink(new EntitySetPathSegment(feedContext.EntitySetBase)); if (selfLink == null) { return null; } return new Uri(selfLink); }); } if (configuration.GetIdLink() == null) { configuration.HasIdLink(new SelfLinkBuilder<Uri>((entityContext) => entityContext.GenerateSelfLink(includeCast: false), followsConventions: true)); } if (configuration.GetEditLink() == null) { bool derivedTypesDefineNavigationProperty = model.DerivedTypes(configuration.EntityType) .OfType<EntityTypeConfiguration>().Any(e => e.NavigationProperties.Any()); // generate links with cast if any of the derived types define a navigation property if (derivedTypesDefineNavigationProperty) { configuration.HasEditLink( new SelfLinkBuilder<Uri>( entityContext => entityContext.GenerateSelfLink(includeCast: true), followsConventions: true)); } else { configuration.HasEditLink( new SelfLinkBuilder<Uri>( entityContext => entityContext.GenerateSelfLink(includeCast: false), followsConventions: true)); } } }
private void ApplyNavigationSourceConventions(INavigationSourceConfiguration navigationSourceConfiguration) { if (!_configuredNavigationSources.Contains(navigationSourceConfiguration)) { _configuredNavigationSources.Add(navigationSourceConfiguration); foreach (INavigationSourceConvention convention in _conventions.OfType <INavigationSourceConvention>()) { if (convention != null) { convention.Apply(navigationSourceConfiguration, this); } } } }
public void Apply(INavigationSourceConfiguration configuration, ODataModelBuilder model) { if (configuration == null) { throw Error.ArgumentNull("configuration"); } // generate links without cast for declared and inherited navigation properties foreach (EntityTypeConfiguration entity in configuration.EntityType.ThisAndBaseTypes()) { foreach (NavigationPropertyConfiguration property in entity.NavigationProperties) { if (configuration.GetNavigationPropertyLink(property) == null) { configuration.HasNavigationPropertyLink( property, new NavigationLinkBuilder( (entityContext, navigationProperty) => entityContext.GenerateNavigationPropertyLink(navigationProperty, includeCast: false), followsConventions: true)); } } } // generate links with cast for navigation properties in derived types. foreach (EntityTypeConfiguration entity in model.DerivedTypes(configuration.EntityType)) { foreach (NavigationPropertyConfiguration property in entity.NavigationProperties) { if (configuration.GetNavigationPropertyLink(property) == null) { configuration.HasNavigationPropertyLink( property, new NavigationLinkBuilder( (entityContext, navigationProperty) => entityContext.GenerateNavigationPropertyLink(navigationProperty, includeCast: true), followsConventions: true)); } } } }
/// <summary> /// Binds the given navigation property to the target navigation source. /// </summary> /// <param name="navigationConfiguration">The navigation property.</param> /// <param name="targetNavigationSource">The target navigation source.</param> /// <returns>The <see cref="NavigationPropertyBindingConfiguration"/> so that it can be further configured.</returns> public virtual NavigationPropertyBindingConfiguration AddBinding(NavigationPropertyConfiguration navigationConfiguration, INavigationSourceConfiguration targetNavigationSource) { if (navigationConfiguration == null) { throw Error.ArgumentNull("navigationConfiguration"); } if (targetNavigationSource == null) { throw Error.ArgumentNull("targetNavigationSource"); } EntityTypeConfiguration declaringEntityType = navigationConfiguration.DeclaringEntityType; if (!(declaringEntityType.IsAssignableFrom(EntityType) || EntityType.IsAssignableFrom(declaringEntityType))) { throw Error.Argument("navigationConfiguration", SRResources.NavigationPropertyNotInHierarchy, declaringEntityType.FullName, EntityType.FullName, Name); } NavigationPropertyBindingConfiguration navigationPropertyBinding; if (_navigationPropertyBindings.TryGetValue(navigationConfiguration, out navigationPropertyBinding)) { if (navigationPropertyBinding.TargetNavigationSource != targetNavigationSource) { throw Error.NotSupported(SRResources.RebindingNotSupported); } } else { navigationPropertyBinding = new NavigationPropertyBindingConfiguration(navigationConfiguration, targetNavigationSource); _navigationPropertyBindings[navigationConfiguration] = navigationPropertyBinding; } return(navigationPropertyBinding); }
/// <summary> /// Binds the given navigation property to the target navigation source. /// </summary> /// <param name="navigationConfiguration">The navigation property.</param> /// <param name="targetNavigationSource">The target navigation source.</param> /// <returns>The <see cref="NavigationPropertyBindingConfiguration"/> so that it can be further configured.</returns> public virtual NavigationPropertyBindingConfiguration AddBinding(NavigationPropertyConfiguration navigationConfiguration, INavigationSourceConfiguration targetNavigationSource) { if (navigationConfiguration == null) { throw Error.ArgumentNull("navigationConfiguration"); } if (targetNavigationSource == null) { throw Error.ArgumentNull("targetNavigationSource"); } EntityTypeConfiguration declaringEntityType = navigationConfiguration.DeclaringEntityType; if (!(declaringEntityType.IsAssignableFrom(EntityType) || EntityType.IsAssignableFrom(declaringEntityType))) { throw Error.Argument("navigationConfiguration", SRResources.NavigationPropertyNotInHierarchy, declaringEntityType.FullName, EntityType.FullName, Name); } NavigationPropertyBindingConfiguration navigationPropertyBinding; if (_navigationPropertyBindings.TryGetValue(navigationConfiguration, out navigationPropertyBinding)) { if (navigationPropertyBinding.TargetNavigationSource != targetNavigationSource) { throw Error.NotSupported(SRResources.RebindingNotSupported); } } else { navigationPropertyBinding = new NavigationPropertyBindingConfiguration(navigationConfiguration, targetNavigationSource); _navigationPropertyBindings[navigationConfiguration] = navigationPropertyBinding; } return navigationPropertyBinding; }
/// <summary> /// Initializes a new instance of the <see cref="NavigationPropertyBindingConfiguration"/> class. /// </summary> /// <param name="navigationProperty">The navigation property for the binding.</param> /// <param name="navigationSource">The target navigation source of the binding.</param> public NavigationPropertyBindingConfiguration(NavigationPropertyConfiguration navigationProperty, INavigationSourceConfiguration navigationSource) { NavigationProperty = navigationProperty; TargetNavigationSource = navigationSource; }