private static void ApplyPropertyConventions(PropertyConfiguration property, IStructuralTypeConfiguration edmTypeConfiguration)
        {
            foreach (IConvention convention in _conventions)
            {
                PrimitivePropertyConfiguration  primitivePropertyConfiguration;
                ComplexPropertyConfiguration    complexPropertyConfiguration;
                NavigationPropertyConfiguration navigationPropertyConfiguration;

                if ((primitivePropertyConfiguration = property as PrimitivePropertyConfiguration) != null)
                {
                    IEdmPropertyConvention <PrimitivePropertyConfiguration> propertyConfigurationConvention = convention as IEdmPropertyConvention <PrimitivePropertyConfiguration>;
                    if (propertyConfigurationConvention != null)
                    {
                        ApplyPropertyConvention(primitivePropertyConfiguration, edmTypeConfiguration, propertyConfigurationConvention);
                    }
                }
                else if ((complexPropertyConfiguration = property as ComplexPropertyConfiguration) != null)
                {
                    IEdmPropertyConvention <ComplexPropertyConfiguration> propertyConfigurationConvention = convention as IEdmPropertyConvention <ComplexPropertyConfiguration>;
                    if (propertyConfigurationConvention != null)
                    {
                        ApplyPropertyConvention(complexPropertyConfiguration, edmTypeConfiguration, propertyConfigurationConvention);
                    }
                }
                else if ((navigationPropertyConfiguration = property as NavigationPropertyConfiguration) != null)
                {
                    IEdmPropertyConvention <NavigationPropertyConfiguration> propertyConfigurationConvention = convention as IEdmPropertyConvention <NavigationPropertyConfiguration>;
                    if (propertyConfigurationConvention != null)
                    {
                        ApplyPropertyConvention(navigationPropertyConfiguration, edmTypeConfiguration, propertyConfigurationConvention);
                    }
                }
            }
        }
        // remove base type properties from the derived types.
        internal void RemoveBaseTypeProperties(EntityTypeConfiguration derivedEntity, EntityTypeConfiguration baseEntity)
        {
            IEnumerable <EntityTypeConfiguration> typesToLift = new[] { derivedEntity }.Concat(this.DerivedTypes(derivedEntity));

            foreach (PropertyConfiguration property in baseEntity.Properties.Concat(baseEntity.DerivedProperties()))
            {
                foreach (EntityTypeConfiguration entity in typesToLift)
                {
                    PropertyConfiguration derivedPropertyToRemove = entity.Properties.Where(p => p.Name == property.Name).SingleOrDefault();
                    if (derivedPropertyToRemove != null)
                    {
                        entity.RemoveProperty(derivedPropertyToRemove.PropertyInfo);
                    }
                }
            }

            foreach (PropertyInfo ignoredProperty in baseEntity.IgnoredProperties())
            {
                foreach (EntityTypeConfiguration entity in typesToLift)
                {
                    PropertyConfiguration derivedPropertyToRemove = entity.Properties.Where(p => p.Name == ignoredProperty.Name).SingleOrDefault();
                    if (derivedPropertyToRemove != null)
                    {
                        entity.RemoveProperty(derivedPropertyToRemove.PropertyInfo);
                    }
                }
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="QueryableRestrictions"/> class.
 /// </summary>
 /// <param name="propertyConfiguration">The PropertyConfiguration containing queryable restrictions.</param>
 public QueryableRestrictions(PropertyConfiguration propertyConfiguration)
 {
     NonFilterable = propertyConfiguration.NonFilterable;
     Unsortable = propertyConfiguration.Unsortable;
     NotNavigable = propertyConfiguration.NotNavigable;
     NotExpandable = propertyConfiguration.NotExpandable;
 }
Exemple #4
0
        public void HasRequired_CanSetSingleForeignKeyProperty_ForReferentialConstraint()
        {
            // Arrange
            PropertyInfo      expectPrincipalPropertyInfo = typeof(User).GetProperty("UserId");
            PropertyInfo      expectDependentPropertyInfo = typeof(Role).GetProperty("UserForeignKey");
            ODataModelBuilder builder = new ODataModelBuilder();

            // Act
            NavigationPropertyConfiguration navigationProperty =
                builder.Entity <Role>().HasRequired(r => r.User, (r, u) => r.UserForeignKey == u.UserId);

            // Assert
            PropertyInfo actualDependentPropertyInfo = Assert.Single(navigationProperty.DependentProperties);

            Assert.Same(expectDependentPropertyInfo, actualDependentPropertyInfo);

            PropertyInfo actualPrincipalPropertyInfo = Assert.Single(navigationProperty.PrincipalProperties);

            Assert.Same(expectPrincipalPropertyInfo, actualPrincipalPropertyInfo);

            PropertyConfiguration propertyConfiguration = Assert.Single(navigationProperty.DeclaringEntityType.Properties
                                                                        .Where(e => e.PropertyInfo == actualDependentPropertyInfo));

            PrimitivePropertyConfiguration primitiveProperty =
                Assert.IsType <PrimitivePropertyConfiguration>(propertyConfiguration);

            Assert.False(primitiveProperty.OptionalProperty);
        }
        private void ValidatePropertyNotAlreadyDefinedInBaseTypes(PropertyInfo propertyInfo)
        {
            PropertyConfiguration baseProperty = this.DerivedProperties().Where(p => p.Name == propertyInfo.Name).FirstOrDefault();

            if (baseProperty != null)
            {
                throw Error.InvalidOperation(SRResources.CannotRedefineBaseTypeProperty, propertyInfo.Name, baseProperty.PropertyInfo.ReflectedType.FullName);
            }
        }
 private void ValidatePropertyNotAlreadyDefinedInDerivedTypes(PropertyInfo propertyInfo)
 {
     foreach (IEntityTypeConfiguration derivedEntity in ModelBuilder.DerivedTypes(this))
     {
         PropertyConfiguration propertyInDerivedType = derivedEntity.Properties.Where(p => p.Name == propertyInfo.Name).FirstOrDefault();
         if (propertyInDerivedType != null)
         {
             throw Error.InvalidOperation(SRResources.PropertyAlreadyDefinedInDerivedType, propertyInfo.Name, FullName, derivedEntity.FullName);
         }
     }
 }
 public PropertyConfigurationTest()
 {
     Mock<PropertyInfo> mockPropertyInfo = new Mock<PropertyInfo>();
     _propertyInfo = mockPropertyInfo.Object;
     Mock<StructuralTypeConfiguration> mockTypeConfig = new Mock<StructuralTypeConfiguration>();
     _declaringType = mockTypeConfig.Object;
     Mock<PropertyConfiguration> mockConfiguration =
         new Mock<PropertyConfiguration>(_propertyInfo, _declaringType) { CallBase = true };
     mockConfiguration.Object.Name = "Name";
     _configuration = mockConfiguration.Object;
 }