public void CanCreateDerivedComplexType() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); builder.ComplexType <BaseComplexType>().Abstract().Property(v => v.BaseProperty); builder.ComplexType <DerivedComplexType>().DerivesFrom <BaseComplexType>().Property(v => v.DerivedProperty); // Act IEdmModel model = builder.GetEdmModel(); // Assert IEdmComplexType baseComplexType = model.AssertHasComplexType(typeof(BaseComplexType)); Assert.Null(baseComplexType.BaseComplexType()); Assert.Single(baseComplexType.Properties()); baseComplexType.AssertHasPrimitiveProperty(model, "BaseProperty", EdmPrimitiveTypeKind.String, true); IEdmComplexType derivedComplexType = model.AssertHasComplexType(typeof(DerivedComplexType)); Assert.Equal(baseComplexType, derivedComplexType.BaseComplexType()); Assert.Equal(2, derivedComplexType.Properties().Count()); derivedComplexType.AssertHasPrimitiveProperty(model, "BaseProperty", EdmPrimitiveTypeKind.String, true); derivedComplexType.AssertHasPrimitiveProperty(model, "DerivedProperty", EdmPrimitiveTypeKind.Int32, false); }
public void CanBuildModelForAnonymousTypes() { Type entityType = new { ID = default(int), ComplexCollection = new[] { new { ComplexProperty = default(string) } }, NavigationCollection = new[] { new { ID = default(int) } } }.GetType(); ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.AddEntitySet("entityset", builder.AddEntity(entityType)); IEdmModel model = builder.GetEdmModel(); IEdmEntityType entity = model.AssertHasEntitySet("entityset", entityType); entity.AssertHasKey(model, "ID", EdmPrimitiveTypeKind.Int32); entity.AssertHasCollectionProperty(model, "ComplexCollection", new { ComplexProperty = default(string) }.GetType(), isNullable: true); entity.AssertHasNavigationProperty(model, "NavigationCollection", new { ID = default(int) }.GetType(), isNullable: false, multiplicity: EdmMultiplicity.ZeroOrOne); IEdmComplexType complexType = model.AssertHasComplexType(new { ComplexProperty = default(string) }.GetType()); complexType.AssertHasPrimitiveProperty(model, "ComplexProperty", EdmPrimitiveTypeKind.String, 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); }
public void CanDefinePropertyOnDerivedType_NotPresentInBaseType_ButPresentInDerivedType() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); builder.ComplexType<DerivedComplexType>().DerivesFrom<BaseComplexType>().Property(m => m.BaseProperty); // Act IEdmModel model = builder.GetEdmModel(); // Assert IEdmComplexType baseComplex = model.AssertHasComplexType(typeof(BaseComplexType)); Assert.Null(baseComplex.BaseComplexType()); Assert.Empty(baseComplex.Properties()); IEdmComplexType derivedComplex = model.AssertHasComplexType(typeof(DerivedComplexType)); Assert.Equal(baseComplex, derivedComplex.BaseComplexType()); Assert.Single(derivedComplex.Properties()); derivedComplex.AssertHasPrimitiveProperty(model, "BaseProperty", EdmPrimitiveTypeKind.String, true); }
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); }