/// <summary> /// If this primitive property is <see cref="System.TimeSpan"/>, this method will make the target /// Edm type kind as <see cref="TimeOfDay"/> /// </summary> /// <param name="property">Reference to the calling primitive property configuration.</param> /// <returns>Returns itself so that multiple calls can be chained.</returns> public static PrimitivePropertyConfiguration AsTimeOfDay(this PrimitivePropertyConfiguration property) { if (property == null) { throw Error.ArgumentNull("property"); } if (!TypeHelper.IsTimeSpan(property.RelatedClrType)) { throw Error.Argument("property", SRResources.MustBeTimeSpanProperty, property.PropertyInfo.Name, property.DeclaringType.FullName); } property.TargetEdmTypeKind = EdmPrimitiveTypeKind.TimeOfDay; return(property); }
/// <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 (this.BaseType != null && this.BaseType.Keys().Any()) { throw Error.InvalidOperation(SRResources.CannotDefineKeysOnDerivedTypes, this.FullName, this.BaseType.FullName); } // Add the enum key if the property type is enum if (keyProperty.PropertyType.IsEnum) { this.ModelBuilder.AddEnumType(keyProperty.PropertyType); EnumPropertyConfiguration enumConfig = this.AddEnumProperty(keyProperty); // keys are always required enumConfig.IsRequired(); if (!this._enumKeys.Contains(enumConfig)) { this._enumKeys.Add(enumConfig); } } else { PrimitivePropertyConfiguration propertyConfig = this.AddProperty(keyProperty); // keys are always required propertyConfig.IsRequired(); if (!this._keys.Contains(propertyConfig)) { this._keys.Add(propertyConfig); } } return(this); }
private void CreateStructuralTypeBody(EdmStructuredType type, StructuralTypeConfiguration config) { foreach (PropertyConfiguration property in config.Properties) { IEdmProperty edmProperty = null; switch (property.Kind) { case PropertyKind.Primitive: PrimitivePropertyConfiguration primitiveProperty = (PrimitivePropertyConfiguration)property; EdmPrimitiveTypeKind typeKind = primitiveProperty.TargetEdmTypeKind ?? GetTypeKind(primitiveProperty.PropertyInfo.PropertyType); IEdmTypeReference primitiveTypeReference = EdmCoreModel.Instance.GetPrimitive( typeKind, primitiveProperty.OptionalProperty); if (typeKind == EdmPrimitiveTypeKind.Decimal) { DecimalPropertyConfiguration decimalProperty = primitiveProperty as DecimalPropertyConfiguration; if (decimalProperty.Precision.HasValue || decimalProperty.Scale.HasValue) { primitiveTypeReference = new EdmDecimalTypeReference( (IEdmPrimitiveType)primitiveTypeReference.Definition, primitiveTypeReference.IsNullable, decimalProperty.Precision, decimalProperty.Scale.HasValue ? decimalProperty.Scale : 0); } } else if (EdmLibHelpers.HasPrecision(typeKind)) { PrecisionPropertyConfiguration precisionProperty = primitiveProperty as PrecisionPropertyConfiguration; primitiveTypeReference = AddPrecisionConfigInPrimitiveTypeReference( precisionProperty, primitiveTypeReference); } else if (EdmLibHelpers.HasLength(typeKind)) { LengthPropertyConfiguration lengthProperty = primitiveProperty as LengthPropertyConfiguration; primitiveTypeReference = AddLengthConfigInPrimitiveTypeReference( lengthProperty, primitiveTypeReference); } edmProperty = type.AddStructuralProperty( primitiveProperty.Name, primitiveTypeReference, defaultValue: null); break; case PropertyKind.Complex: ComplexPropertyConfiguration complexProperty = property as ComplexPropertyConfiguration; IEdmComplexType complexType = this.GetEdmType(complexProperty.RelatedClrType) as IEdmComplexType; edmProperty = type.AddStructuralProperty( complexProperty.Name, new EdmComplexTypeReference(complexType, complexProperty.OptionalProperty)); break; case PropertyKind.Collection: edmProperty = this.CreateStructuralTypeCollectionPropertyBody(type, (CollectionPropertyConfiguration)property); break; case PropertyKind.Enum: edmProperty = this.CreateStructuralTypeEnumPropertyBody(type, (EnumPropertyConfiguration)property); break; default: break; } if (edmProperty != null) { if (property.PropertyInfo != null) { this._properties[property.PropertyInfo] = edmProperty; } if (property.IsRestricted) { this._propertiesRestrictions[edmProperty] = new QueryableRestrictions(property); } if (property.QueryConfiguration.ModelBoundQuerySettings != null) { this._propertiesQuerySettings.Add(edmProperty, property.QueryConfiguration.ModelBoundQuerySettings); } } } }