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; }
internal void AddEntitySet(string entitySetName, ResourceSetWrapper resourceSet) { IEdmEntityType elementType = (IEdmEntityType) this.model.EnsureSchemaType(resourceSet.ResourceType); IEdmEntitySet target = new EdmEntitySet(this, entitySetName, elementType); MetadataProviderUtils.ConvertCustomAnnotations(this.model, resourceSet.CustomAnnotations, target); this.entitySetCache.Add(entitySetName, target); }
/// <summary> /// Searches for an entity set with the given name in this entity container and creates a new set if no such set exists. /// </summary> /// <param name="setName">The name of the element being found.</param> /// <returns>The requested element, or the new element created if no such element exists.</returns> public override IEdmEntitySet FindEntitySet(string setName) { // Check to make sure the set name is not a primitive type or collection type before you create a dynamic set. if (this.model.IsKnownType(setName)) { return null; } if (setName == Constants.EntitySetName) { return this.tablesSet; } // See if a set has already been created for this name. IEdmEntitySet set = base.FindEntitySet(setName); if (set == null) { // If not, create the set dynamically, and assume the type name is based on the table/set name. string serverTypeName = this.InferServerTypeNameFromTableName(setName); set = new EdmEntitySet(this, setName, (IEdmEntityType)((IEdmModel)this.model).FindDeclaredType(serverTypeName)); this.AddElement(set); } return set; }
public virtual EdmEntitySet AddEntitySet(string name, IEdmEntityType elementType) { EdmEntitySet edmEntitySet = new EdmEntitySet(this, name, elementType); this.AddElement(edmEntitySet); return(edmEntitySet); }
public void GetEntitySetLinkBuilder_ReturnsDefaultEntitySetBuilder_IfNotSet() { IEdmModel model = new EdmModel(); EdmEntityContainer container = new EdmEntityContainer("NS", "Container"); EdmEntityType entityType = new EdmEntityType("NS", "Entity"); IEdmEntitySet entitySet = new EdmEntitySet(container, "EntitySet", entityType); Assert.NotNull(model.GetEntitySetLinkBuilder(entitySet)); }
public void GetEntitySetLinkBuilder_After_SetEntitySetLinkBuilder() { // Arrange IEdmModel model = new EdmModel(); EdmEntityContainer container = new EdmEntityContainer("NS", "Container"); EdmEntityType entityType = new EdmEntityType("NS", "Entity"); IEdmEntitySet entitySet = new EdmEntitySet(container, "EntitySet", entityType); EntitySetLinkBuilderAnnotation entitySetLinkBuilder = new EntitySetLinkBuilderAnnotation(); // Act model.SetEntitySetLinkBuilder(entitySet, entitySetLinkBuilder); var result = model.GetEntitySetLinkBuilder(entitySet); // Assert Assert.Same(entitySetLinkBuilder, result); }
public void Ctor_FollowingConventions_GeneratesSelfLinkWithoutCast_IfDerivedTypesHaveNoNavigationProperty() { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); IEdmEntitySet specialCustomers = new EdmEntitySet(model.Container, "SpecialCustomers", model.SpecialCustomer); HttpRequestMessage request = GetODataRequest(model.Model); ODataSerializerContext serializerContext = new ODataSerializerContext { Model = model.Model, EntitySet = specialCustomers, Url = request.GetUrlHelper() }; EntityInstanceContext instanceContext = new EntityInstanceContext(serializerContext, model.Customer.AsReference(), new { ID = 42 }); // Act EntitySetLinkBuilderAnnotation linkBuilder = new EntitySetLinkBuilderAnnotation(specialCustomers, model.Model); string result = linkBuilder.BuildIdLink(instanceContext, ODataMetadataLevel.Default); // Assert Assert.Equal("http://localhost/SpecialCustomers(42)", result); }
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); } } } } }
public void GenerateActionLink_GeneratesLinkWithDownCast_IfElementTypeDerivesFromBindingParameterType() { // Arrange IEdmEntitySet specialCustomers = new EdmEntitySet(_model.Container, "SpecialCustomers", _model.SpecialCustomer); HttpRequestMessage request = GetODataRequest(_model.Model); var serializerContext = new ODataSerializerContext { Model = _model.Model, EntitySet = specialCustomers, Url = request.GetUrlHelper() }; var entityContext = new EntityInstanceContext(serializerContext, _model.SpecialCustomer.AsReference(), new { ID = 42 }); // Act Uri link = entityContext.GenerateActionLink(_model.UpgradeCustomer); Assert.Equal("http://localhost/SpecialCustomers(42)/NS.Customer/upgrade", link.AbsoluteUri); }
private static IEdmModel BuildModel(JObject viewObject, out IList<string> fieldsToIgnore) { var model = new EdmModel(); fieldsToIgnore = new List<string>(); var name = viewObject.PrimitivePropertyValue<string>("name"); name = name.Replace(' ', '_'); var entityType = new EdmEntityType(false, false, null, "OData4Socrata", name, Enumerable.Empty<IEdmStructuralProperty>()); var entitySet = new EdmEntitySet(name, entityType); EdmComplexType phoneComplex = null; EdmComplexType locationComplex = null; EdmComplexType urlComplex = null; foreach (var column in viewObject.ArrayPropertyValue<JObject>("columns")) { var fieldName = column.PrimitivePropertyValue<string>("name"); var sodaType = column.PrimitivePropertyValue<string>("dataTypeName"); IEdmTypeReference typeReference; switch (sodaType) { case "meta_data": fieldsToIgnore.Add(fieldName); continue; case "text": typeReference = EdmLibraryExtensions.GetPrimitiveTypeReference(typeof (string)); break; case "url": if (urlComplex == null) { urlComplex = new EdmComplexType(false, false, null, entityType.Namespace, "url"); new EdmStructuralProperty(urlComplex, "url", EdmLibraryExtensions.GetPrimitiveTypeReference(typeof (string)), null, EdmConcurrencyMode.None); model.AddElement(urlComplex); } typeReference = new EdmComplexTypeReference(urlComplex, false); break; case "phone": if (phoneComplex == null) { phoneComplex = new EdmComplexType(false, false, null, entityType.Namespace, "phone"); new EdmStructuralProperty(phoneComplex, "phone_number", EdmLibraryExtensions.GetPrimitiveTypeReference(typeof (string)), null, EdmConcurrencyMode.None); new EdmStructuralProperty(phoneComplex, "phone_type", EdmLibraryExtensions.GetPrimitiveTypeReference(typeof (string)), null, EdmConcurrencyMode.None); model.AddElement(phoneComplex); } typeReference = new EdmComplexTypeReference(phoneComplex, false); break; case "location": if (locationComplex == null) { locationComplex = new EdmComplexType(false, false, null, entityType.Namespace, "location"); new EdmStructuralProperty(locationComplex, "human_address", EdmLibraryExtensions.GetPrimitiveTypeReference(typeof (string)), null, EdmConcurrencyMode.None); new EdmStructuralProperty(locationComplex, "latitude", EdmLibraryExtensions.GetPrimitiveTypeReference(typeof (string)), null, EdmConcurrencyMode.None); new EdmStructuralProperty(locationComplex, "longitude", EdmLibraryExtensions.GetPrimitiveTypeReference(typeof (string)), null, EdmConcurrencyMode.None); new EdmStructuralProperty(locationComplex, "machine_address", EdmLibraryExtensions.GetPrimitiveTypeReference(typeof (string)), null, EdmConcurrencyMode.None); new EdmStructuralProperty(locationComplex, "needs_recoding", EdmLibraryExtensions.GetPrimitiveTypeReference(typeof (bool)), null, EdmConcurrencyMode.None); model.AddElement(locationComplex); } typeReference = new EdmComplexTypeReference(locationComplex, false); break; default: throw new Exception(); } new EdmStructuralProperty(entityType, fieldName, typeReference, null, EdmConcurrencyMode.None); } model.AddElement(entityType); var entityContainer = new EdmEntityContainer(); model.AddEntityContainer(entityContainer); entityContainer.AddElement(entitySet); return model; }
public virtual EdmEntitySet AddEntitySet(string name, IEdmEntityType elementType) { EdmEntitySet edmEntitySet = new EdmEntitySet(this, name, elementType); this.AddElement(edmEntitySet); return edmEntitySet; }