protected NavigationSourceConfiguration(ODataModelBuilder modelBuilder, EntityTypeConfiguration entityType, string name) { if (modelBuilder == null) { throw Error.ArgumentNull("modelBuilder"); } if (entityType == null) { throw Error.ArgumentNull("entityType"); } if (String.IsNullOrEmpty(name)) { throw Error.ArgumentNullOrEmpty("name"); } _modelBuilder = modelBuilder; Name = name; EntityType = entityType; ClrType = entityType.ClrType; _url = Name; _editLinkBuilder = null; _readLinkBuilder = null; _navigationPropertyLinkBuilders = new Dictionary <NavigationPropertyConfiguration, NavigationLinkBuilder>(); }
/// <summary> /// Configures the ID link for this navigation source. /// </summary> /// <param name="idLinkBuilder">The builder used to generate the ID.</param> /// <returns>Returns itself so that multiple calls can be chained.</returns> public virtual NavigationSourceConfiguration HasIdLink(SelfLinkBuilder <Uri> idLinkBuilder) { if (idLinkBuilder == null) { throw Error.ArgumentNull("idLinkBuilder"); } _idLinkBuilder = idLinkBuilder; return(this); }
/// <summary> /// Configures the read link for this navigation source. /// </summary> /// <param name="readLinkBuilder">The builder used to generate the read link.</param> /// <returns>Returns itself so that multiple calls can be chained.</returns> public virtual NavigationSourceConfiguration HasReadLink(SelfLinkBuilder <Uri> readLinkBuilder) { if (readLinkBuilder == null) { throw Error.ArgumentNull("readLinkBuilder"); } _readLinkBuilder = readLinkBuilder; return(this); }
/// <summary> /// Configures the edit link for this navigation source. /// </summary> /// <param name="editLinkBuilder">The builder used to generate the edit link.</param> /// <returns>Returns itself so that multiple calls can be chained.</returns> public virtual NavigationSourceConfiguration HasEditLink(SelfLinkBuilder <Uri> editLinkBuilder) { if (editLinkBuilder == null) { throw Error.ArgumentNull("editLinkBuilder"); } _editLinkBuilder = editLinkBuilder; return(this); }
/// <summary> /// Constructs an instance of an <see cref="NavigationSourceLinkBuilderAnnotation" /> from an <see cref="NavigationSourceConfiguration" />. /// </summary> public NavigationSourceLinkBuilderAnnotation(NavigationSourceConfiguration navigationSource) { if (navigationSource == null) { throw Error.ArgumentNull("navigationSource"); } _idLinkBuilder = navigationSource.GetIdLink(); _editLinkBuilder = navigationSource.GetEditLink(); _readLinkBuilder = navigationSource.GetReadLink(); }
/// <summary> /// Constructs an instance of an <see cref="NavigationSourceLinkBuilderAnnotation" /> class. /// </summary> /// <param name="navigationSource">The navigation source for which the link builder is being constructed.</param> /// <param name="idLinkBuilder">The ID link builder which is used to build the ID link.</param> /// <param name="editLinkBuilder">The Edit link builder which is used to build the Edit link.</param> /// <param name="readLinkBuilder">The Read link builder which is used to build the Read link.</param> public NavigationSourceLinkBuilderAnnotation( IEdmNavigationSource navigationSource, SelfLinkBuilder <Uri> idLinkBuilder, SelfLinkBuilder <Uri> editLinkBuilder, SelfLinkBuilder <Uri> readLinkBuilder) { if (navigationSource == null) { throw Error.ArgumentNull("navigationSource"); } _idLinkBuilder = idLinkBuilder; _editLinkBuilder = editLinkBuilder; _readLinkBuilder = readLinkBuilder; }
/// <summary> /// Initializes a new instance of the <see cref="NavigationSourceLinkBuilderAnnotation"/> class. /// </summary> /// <param name="navigationSource">The navigation source for which the link builder is being constructed.</param> /// <param name="model">The EDM model that this navigation source belongs to.</param> /// <remarks>This constructor creates a link builder that generates URL's that follow OData conventions for the given navigation source.</remarks> public NavigationSourceLinkBuilderAnnotation(IEdmNavigationSource navigationSource, IEdmModel model) { if (navigationSource == null) { throw Error.ArgumentNull("navigationSource"); } if (model == null) { throw Error.ArgumentNull("model"); } IEdmEntityType elementType = navigationSource.EntityType(); IEnumerable <IEdmEntityType> derivedTypes = model.FindAllDerivedTypes(elementType).Cast <IEdmEntityType>(); // Add navigation link builders for all navigation properties of entity. foreach (IEdmNavigationProperty navigationProperty in elementType.NavigationProperties()) { Func <EntityInstanceContext, IEdmNavigationProperty, Uri> navigationLinkFactory = (entityInstanceContext, navProperty) => entityInstanceContext.GenerateNavigationPropertyLink(navProperty, includeCast: false); AddNavigationPropertyLinkBuilder(navigationProperty, new NavigationLinkBuilder(navigationLinkFactory, followsConventions: true)); } // Add navigation link builders for all navigation properties in derived types. bool derivedTypesDefineNavigationProperty = false; foreach (IEdmEntityType derivedEntityType in derivedTypes) { foreach (IEdmNavigationProperty navigationProperty in derivedEntityType.DeclaredNavigationProperties()) { derivedTypesDefineNavigationProperty = true; Func <EntityInstanceContext, IEdmNavigationProperty, Uri> navigationLinkFactory = (entityInstanceContext, navProperty) => entityInstanceContext.GenerateNavigationPropertyLink(navProperty, includeCast: true); AddNavigationPropertyLinkBuilder(navigationProperty, new NavigationLinkBuilder(navigationLinkFactory, followsConventions: true)); } } Func <EntityInstanceContext, Uri> selfLinkFactory = (entityInstanceContext) => entityInstanceContext.GenerateSelfLink(includeCast: derivedTypesDefineNavigationProperty); _idLinkBuilder = new SelfLinkBuilder <Uri>(selfLinkFactory, followsConventions: true); }