/// <summary> /// Removes the enum property from the entity enum keys collection. /// </summary> /// <param name="enumKeyProperty">The key to be removed.</param> /// <remarks>This method just disable the property to be not a key anymore. It does not remove the property all together. /// To remove the property completely, use the method <see cref="RemoveProperty"/></remarks> public virtual void RemoveKey(EnumPropertyConfiguration enumKeyProperty) { if (enumKeyProperty == null) { throw Error.ArgumentNull("enumKeyProperty"); } _enumKeys.Remove(enumKeyProperty); }
private EnumPropertyConfiguration GetEnumPropertyConfiguration(Expression propertyExpression, bool optional) { PropertyInfo propertyInfo = PropertySelectorVisitor.GetSelectedProperty(propertyExpression); EnumPropertyConfiguration property = _configuration.AddEnumProperty(propertyInfo); if (optional) { property.IsOptional(); } return(property); }
/// <summary> /// Adds an enum property to this edm type. /// </summary> /// <param name="propertyInfo">The property being added.</param> /// <returns>The <see cref="EnumPropertyConfiguration"/> so that the property can be configured further.</returns> public virtual EnumPropertyConfiguration AddEnumProperty(PropertyInfo propertyInfo) { if (propertyInfo == null) { throw Error.ArgumentNull("propertyInfo"); } if (!propertyInfo.DeclaringType.IsAssignableFrom(ClrType)) { throw Error.Argument("propertyInfo", SRResources.PropertyDoesNotBelongToType, propertyInfo.Name, ClrType.FullName); } if (!TypeHelper.IsEnum(propertyInfo.PropertyType)) { throw Error.Argument("propertyInfo", SRResources.MustBeEnumProperty, propertyInfo.Name, ClrType.FullName); } ValidatePropertyNotAlreadyDefinedInBaseTypes(propertyInfo); ValidatePropertyNotAlreadyDefinedInDerivedTypes(propertyInfo); // Remove from the ignored properties if (RemovedProperties.Contains(propertyInfo)) { RemovedProperties.Remove(propertyInfo); } EnumPropertyConfiguration propertyConfiguration; if (ExplicitProperties.ContainsKey(propertyInfo)) { propertyConfiguration = ExplicitProperties[propertyInfo] as EnumPropertyConfiguration; if (propertyConfiguration == null) { throw Error.Argument("propertyInfo", SRResources.MustBeEnumProperty, propertyInfo.Name, ClrType.FullName); } } else { propertyConfiguration = new EnumPropertyConfiguration(propertyInfo, this); ExplicitProperties[propertyInfo] = propertyConfiguration; } return(propertyConfiguration); }
/// <summary> /// Adds an enum property to this edm type. /// </summary> /// <param name="propertyInfo">The property being added.</param> /// <returns>The <see cref="EnumPropertyConfiguration"/> so that the property can be configured further.</returns> public virtual EnumPropertyConfiguration AddEnumProperty(PropertyInfo propertyInfo) { if (propertyInfo == null) { throw Error.ArgumentNull("propertyInfo"); } if (!TypeHelper.GetReflectedType(propertyInfo).IsAssignableFrom(ClrType)) { throw Error.Argument("propertyInfo", SRResources.PropertyDoesNotBelongToType, propertyInfo.Name, ClrType.FullName); } if (!TypeHelper.IsEnum(propertyInfo.PropertyType)) { throw Error.Argument("propertyInfo", SRResources.MustBeEnumProperty, propertyInfo.Name, ClrType.FullName); } ValidatePropertyNotAlreadyDefinedInBaseTypes(propertyInfo); ValidatePropertyNotAlreadyDefinedInDerivedTypes(propertyInfo); // Remove from the ignored properties if (RemovedProperties.Any(prop => prop.Name.Equals(propertyInfo.Name))) { RemovedProperties.Remove(RemovedProperties.First(prop => prop.Name.Equals(propertyInfo.Name))); } EnumPropertyConfiguration propertyConfiguration = ValidatePropertyNotAlreadyDefinedOtherTypes <EnumPropertyConfiguration>(propertyInfo, SRResources.MustBeEnumProperty); if (propertyConfiguration == null) { propertyConfiguration = new EnumPropertyConfiguration(propertyInfo, this); ExplicitProperties[propertyInfo] = propertyConfiguration; } return(propertyConfiguration); }
/// <summary> /// Configures the key property(s) for this entity type. /// </summary> /// <param name="keyProperty">The property to be added to the key properties of this entity type.</param> /// <returns>Returns itself so that multiple calls can be chained.</returns> public virtual EntityTypeConfiguration HasKey(PropertyInfo keyProperty) { if (BaseType != null && BaseType.Keys().Any()) { throw Error.InvalidOperation(SRResources.CannotDefineKeysOnDerivedTypes, FullName, BaseType.FullName); } // Add the enum key if the property type is enum if (TypeHelper.IsEnum(keyProperty.PropertyType)) { ModelBuilder.AddEnumType(keyProperty.PropertyType); EnumPropertyConfiguration enumConfig = AddEnumProperty(keyProperty); // keys are always required enumConfig.IsRequired(); if (!_enumKeys.Contains(enumConfig)) { _enumKeys.Add(enumConfig); } } else { PrimitivePropertyConfiguration propertyConfig = AddProperty(keyProperty); // keys are always required propertyConfig.IsRequired(); if (!_keys.Contains(propertyConfig)) { _keys.Add(propertyConfig); } } return(this); }
private IEdmProperty CreateStructuralTypeEnumPropertyBody(EdmStructuredType type, EnumPropertyConfiguration enumProperty) { Type enumPropertyType = TypeHelper.GetUnderlyingTypeOrSelf(enumProperty.RelatedClrType); IEdmType edmType = GetEdmType(enumPropertyType); if (edmType == null) { throw Error.InvalidOperation(SRResources.EnumTypeDoesNotExist, enumPropertyType.Name); } IEdmEnumType enumType = (IEdmEnumType)edmType; IEdmTypeReference enumTypeReference = new EdmEnumTypeReference(enumType, enumProperty.OptionalProperty); return(type.AddStructuralProperty( enumProperty.Name, enumTypeReference, defaultValue: null)); }
/// <summary> /// Adds an enum property to this edm type. /// </summary> /// <param name="propertyInfo">The property being added.</param> /// <returns>The <see cref="EnumPropertyConfiguration"/> so that the property can be configured further.</returns> public virtual EnumPropertyConfiguration AddEnumProperty(PropertyInfo propertyInfo) { if (propertyInfo == null) { throw Error.ArgumentNull("propertyInfo"); } if (!propertyInfo.DeclaringType.IsAssignableFrom(ClrType)) { throw Error.Argument("propertyInfo", SRResources.PropertyDoesNotBelongToType, propertyInfo.Name, ClrType.FullName); } if (!TypeHelper.IsEnum(propertyInfo.PropertyType)) { throw Error.Argument("propertyInfo", SRResources.MustBeEnumProperty, propertyInfo.Name, ClrType.FullName); } ValidatePropertyNotAlreadyDefinedInBaseTypes(propertyInfo); ValidatePropertyNotAlreadyDefinedInDerivedTypes(propertyInfo); // Remove from the ignored properties if (RemovedProperties.Contains(propertyInfo)) { RemovedProperties.Remove(propertyInfo); } EnumPropertyConfiguration propertyConfiguration; if (ExplicitProperties.ContainsKey(propertyInfo)) { propertyConfiguration = ExplicitProperties[propertyInfo] as EnumPropertyConfiguration; if (propertyConfiguration == null) { throw Error.Argument("propertyInfo", SRResources.MustBeEnumProperty, propertyInfo.Name, ClrType.FullName); } } else { propertyConfiguration = new EnumPropertyConfiguration(propertyInfo, this); ExplicitProperties[propertyInfo] = propertyConfiguration; } return propertyConfiguration; }
private IEdmProperty CreateStructuralTypeEnumPropertyBody(EdmStructuredType type, StructuralTypeConfiguration config, EnumPropertyConfiguration enumProperty) { Type enumPropertyType = TypeHelper.GetUnderlyingTypeOrSelf(enumProperty.RelatedClrType); IEdmType edmType = GetEdmType(enumPropertyType); if (edmType == null) { throw Error.InvalidOperation(SRResources.EnumTypeDoesNotExist, enumPropertyType.Name); } IEdmEnumType enumType = (IEdmEnumType)edmType; IEdmTypeReference enumTypeReference = new EdmEnumTypeReference(enumType, enumProperty.OptionalProperty); // Set concurrency token if is entity type, and concurrency token is true EdmConcurrencyMode enumConcurrencyMode = EdmConcurrencyMode.None; if (config.Kind == EdmTypeKind.Entity && enumProperty.ConcurrencyToken) { enumConcurrencyMode = EdmConcurrencyMode.Fixed; } return(type.AddStructuralProperty( enumProperty.Name, enumTypeReference, defaultValue: null, concurrencyMode: enumConcurrencyMode)); }
private IEdmProperty CreateStructuralTypeEnumPropertyBody(EdmStructuredType type, StructuralTypeConfiguration config, EnumPropertyConfiguration enumProperty) { Type enumPropertyType = TypeHelper.GetUnderlyingTypeOrSelf(enumProperty.RelatedClrType); IEdmType edmType = GetEdmType(enumPropertyType); if (edmType == null) { throw Error.InvalidOperation(SRResources.EnumTypeDoesNotExist, enumPropertyType.Name); } IEdmEnumType enumType = (IEdmEnumType)edmType; IEdmTypeReference enumTypeReference = new EdmEnumTypeReference(enumType, enumProperty.OptionalProperty); // Set concurrency token if is entity type, and concurrency token is true EdmConcurrencyMode enumConcurrencyMode = EdmConcurrencyMode.None; if (config.Kind == EdmTypeKind.Entity && enumProperty.ConcurrencyToken) { enumConcurrencyMode = EdmConcurrencyMode.Fixed; } return type.AddStructuralProperty( enumProperty.Name, enumTypeReference, defaultValue: null, concurrencyMode: enumConcurrencyMode); }