/// <summary> /// Configures the navigation link for the given navigation property for entities from this entity set. /// </summary> /// <param name="navigationProperty">The navigation property for which the navigation link is being generated.</param> /// <param name="navigationLinkBuilder">The builder used to generate the navigation link.</param> /// <returns>Returns itself so that multiple calls can be chained.</returns> public virtual EntitySetConfiguration HasNavigationPropertyLink(NavigationPropertyConfiguration navigationProperty, NavigationLinkBuilder navigationLinkBuilder) { if (navigationProperty == null) { throw Error.ArgumentNull("navigationProperty"); } if (navigationLinkBuilder == null) { throw Error.ArgumentNull("navigationLinkBuilder"); } EntityTypeConfiguration declaringEntityType = navigationProperty.DeclaringEntityType; if (!(declaringEntityType.IsAssignableFrom(EntityType) || EntityType.IsAssignableFrom(declaringEntityType))) { throw Error.Argument("navigationProperty", SRResources.NavigationPropertyNotInHierarchy, declaringEntityType.FullName, EntityType.FullName, Name); } _navigationPropertyLinkBuilders[navigationProperty] = navigationLinkBuilder; return(this); }
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) { NavigationPropertyBindingConfiguration 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]); NavigationLinkBuilder linkBuilderFunc = configuration.GetNavigationPropertyLink(navigation); if (linkBuilderFunc != null) { linkBuilder.AddNavigationPropertyLinkBuilder(edmNavigationProperty, linkBuilderFunc); } } } } }
/// <summary> /// Register a link builder for a <see cref="IEdmNavigationProperty" /> that navigates from Entities in this EntitySet. /// </summary> public void AddNavigationPropertyLinkBuilder(IEdmNavigationProperty navigationProperty, NavigationLinkBuilder linkBuilder) { _navigationPropertyLinkBuilderLookup[navigationProperty] = linkBuilder; }
/// <summary> /// Configures the navigation link for the given navigation properties for entities from this entity set. /// </summary> /// <param name="navigationProperties">The navigation properties for which the navigation link is being generated.</param> /// <param name="navigationLinkBuilder">The builder used to generate the navigation link.</param> /// <returns>Returns itself so that multiple calls can be chained.</returns> public virtual EntitySetConfiguration HasNavigationPropertiesLink(IEnumerable <NavigationPropertyConfiguration> navigationProperties, NavigationLinkBuilder navigationLinkBuilder) { if (navigationProperties == null) { throw Error.ArgumentNull("navigationProperties"); } if (navigationLinkBuilder == null) { throw Error.ArgumentNull("navigationLinkBuilder"); } foreach (NavigationPropertyConfiguration navigationProperty in navigationProperties) { HasNavigationPropertyLink(navigationProperty, navigationLinkBuilder); } return(this); }
/// <summary> /// Configures the navigation link for the given navigation properties for entities from this entity set. /// </summary> /// <param name="navigationProperties">The navigation properties for which the navigation link is being generated.</param> /// <param name="navigationLinkBuilder">The builder used to generate the navigation link.</param> /// <returns>Returns itself so that multiple calls can be chained.</returns> public virtual EntitySetConfiguration HasNavigationPropertiesLink(IEnumerable<NavigationPropertyConfiguration> navigationProperties, NavigationLinkBuilder navigationLinkBuilder) { if (navigationProperties == null) { throw Error.ArgumentNull("navigationProperties"); } if (navigationLinkBuilder == null) { throw Error.ArgumentNull("navigationLinkBuilder"); } foreach (NavigationPropertyConfiguration navigationProperty in navigationProperties) { HasNavigationPropertyLink(navigationProperty, navigationLinkBuilder); } return this; }
/// <summary> /// Configures the navigation link for the given navigation property for entities from this entity set. /// </summary> /// <param name="navigationProperty">The navigation property for which the navigation link is being generated.</param> /// <param name="navigationLinkBuilder">The builder used to generate the navigation link.</param> /// <returns>Returns itself so that multiple calls can be chained.</returns> public virtual EntitySetConfiguration HasNavigationPropertyLink(NavigationPropertyConfiguration navigationProperty, NavigationLinkBuilder navigationLinkBuilder) { if (navigationProperty == null) { throw Error.ArgumentNull("navigationProperty"); } if (navigationLinkBuilder == null) { throw Error.ArgumentNull("navigationLinkBuilder"); } EntityTypeConfiguration declaringEntityType = navigationProperty.DeclaringEntityType; if (!(declaringEntityType.IsAssignableFrom(EntityType) || EntityType.IsAssignableFrom(declaringEntityType))) { throw Error.Argument("navigationProperty", SRResources.NavigationPropertyNotInHierarchy, declaringEntityType.FullName, EntityType.FullName, Name); } _navigationPropertyLinkBuilders[navigationProperty] = navigationLinkBuilder; return this; }