public void CanConfigureSingleProperty_MultipleBindingPath_For_NavigationProperties_WithComplex() { // Arrange ODataModelBuilder builder = ODataModelBuilderMocks.GetModelBuilderMock <ODataModelBuilder>(); builder .EntitySet <BindingCustomer>("Customers") .Binding .HasSinglePath(c => c.Location) .HasRequiredBinding(a => a.City, "Cities"); // Act IEdmModel model = builder.GetEdmModel(); // Assert var customers = model.EntityContainer.FindEntitySet("Customers"); Assert.NotNull(customers); // "BindingCustomer" entity type var customer = model.AssertHasEntityType(typeof(BindingCustomer)); Assert.Empty(customer.NavigationProperties()); IEdmProperty locationProperty = Assert.Single(customer.Properties()); Assert.Equal("Location", locationProperty.Name); Assert.Equal(EdmPropertyKind.Structural, locationProperty.PropertyKind); // "BindingAddress" complex type var address = model.AssertHasComplexType(typeof(BindingAddress)); var cityProperty = address.AssertHasNavigationProperty(model, "City", typeof(BindingCity), isNullable: false, multiplicity: EdmMultiplicity.One); var bindings = customers.FindNavigationPropertyBindings(cityProperty); IEdmNavigationPropertyBinding binding = Assert.Single(bindings); Assert.Equal("City", binding.NavigationProperty.Name); Assert.Equal("Cities", binding.Target.Name); Assert.Equal("Location/City", binding.Path.Path); IEdmNavigationSource navSource = customers.FindNavigationTarget(cityProperty, binding.Path); Assert.Same(navSource, binding.Target); // "BindingCity" entity type model.AssertHasEntityType(typeof(BindingCity)); }
public void CanConfigureSingleProperty_MultipleBindingPath_For_NavigationProperties_WithComplex_Multiple() { // Arrange ODataModelBuilder builder = ODataModelBuilderMocks.GetModelBuilderMock <ODataModelBuilder>(); builder .EntitySet <BindingCustomer>("Customers") .Binding .HasSinglePath(c => c.Location) .HasRequiredBinding(a => a.City, "Cities_A"); builder .EntitySet <BindingCustomer>("Customers") .Binding .HasSinglePath(c => c.Address) .HasRequiredBinding(a => a.City, "Cities_B"); // Act IEdmModel model = builder.GetEdmModel(); // Assert var customers = model.EntityContainer.FindEntitySet("Customers"); Assert.NotNull(customers); // "BindingCustomer" entity type var customer = model.AssertHasEntityType(typeof(BindingCustomer)); Assert.Empty(customer.NavigationProperties()); // "BindingAddress" complex type var address = model.AssertHasComplexType(typeof(BindingAddress)); var cityProperty = address.AssertHasNavigationProperty(model, "City", typeof(BindingCity), isNullable: false, multiplicity: EdmMultiplicity.One); var bindings = customers.FindNavigationPropertyBindings(cityProperty).ToList(); Assert.Equal(2, bindings.Count()); Assert.Equal("City, City", String.Join(", ", bindings.Select(e => e.NavigationProperty.Name))); Assert.Equal("Cities_A, Cities_B", String.Join(", ", bindings.Select(e => e.Target.Name))); Assert.Equal("Location/City, Address/City", String.Join(", ", bindings.Select(e => e.Path.Path))); // "BindingCity" entity type model.AssertHasEntityType(typeof(BindingCity)); }
public void ODataConventionModelBuilder_IgnoresIndexerProperties() { MockType type = new MockType("ComplexType") .Property <int>("Item"); MockPropertyInfo pi = type.GetProperty("Item"); pi.Setup(p => p.GetIndexParameters()).Returns(new[] { new Mock <ParameterInfo>().Object }); // make it indexer ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.AddComplexType(type); IEdmModel model = builder.GetEdmModel(); IEdmComplexType complexType = model.AssertHasComplexType(type); Assert.Empty(complexType.Properties()); }
public void GetEdmModel_PropertyWithDatabaseAttribute_CannotSetStoreGeneratedPatternOnComplexType() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); builder.ComplexType <Customer>().Property(c => c.Name).HasStoreGeneratedPattern(DatabaseGeneratedOption.Computed); // Act IEdmModel model = builder.GetEdmModel(); // Assert IEdmComplexType type = model.AssertHasComplexType(typeof(Customer)); IEdmStructuralProperty property = type.AssertHasPrimitiveProperty(model, "Name", EdmPrimitiveTypeKind.String, isNullable: true); var idAnnotation = model.GetAnnotationValue <EdmStringConstant>( property, StoreGeneratedPatternAnnotation.AnnotationsNamespace, StoreGeneratedPatternAnnotation.AnnotationName); Assert.Null(idAnnotation); }
public void CanMapObjectArrayAsAComplexProperty() { MockType type = new MockType("entity") .Property <int>("ID") .Property <object[]>("Collection"); ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var entityType = builder.AddEntity(type); entityType.AddCollectionProperty(type.GetProperty("Collection")); builder.AddEntitySet("entityset", entityType); IEdmModel model = builder.GetEdmModel(); Assert.Equal(3, model.SchemaElements.Count()); var entityEdmType = model.AssertHasEntitySet("entityset", type); model.AssertHasComplexType(typeof(object)); entityEdmType.AssertHasCollectionProperty(model, "Collection", typeof(object), isNullable: true); }
public void GetEdmModel_PropertyWithDatabaseAttribute_CannotConfigAnnotationOnPropertyOnComplexType() { // Arrange MockType type = new MockType("Complex") .Property(typeof(int), "ID", new DatabaseGeneratedAttribute(DatabaseGeneratedOption.Computed)) .Property(typeof(int?), "Count"); ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.AddComplexType(type); // Act IEdmModel model = builder.GetEdmModel(); // Assert IEdmComplexType entity = model.AssertHasComplexType(type); IEdmStructuralProperty idProperty = entity.AssertHasPrimitiveProperty(model, "ID", EdmPrimitiveTypeKind.Int32, isNullable: false); var idAnnotation = model.GetAnnotationValue <EdmStringConstant>( idProperty, StoreGeneratedPatternAnnotation.AnnotationsNamespace, StoreGeneratedPatternAnnotation.AnnotationName); Assert.Null(idAnnotation); IEdmStructuralProperty countProperty = entity.AssertHasPrimitiveProperty(model, "Count", EdmPrimitiveTypeKind.Int32, isNullable: true); var countAnnotation = model.GetAnnotationValue <EdmStringConstant>( countProperty, StoreGeneratedPatternAnnotation.AnnotationsNamespace, StoreGeneratedPatternAnnotation.AnnotationName); Assert.Null(countAnnotation); }