private PropertyBuilder VisitDefaultValue(ColumnModel column, PropertyBuilder propertyBuilder) { if (column.DefaultValue != null) { // unset default propertyBuilder.Metadata.ValueGenerated = null; propertyBuilder.Metadata.Relational().GeneratedValueSql = null; var property = propertyBuilder.Metadata; var defaultExpressionOrValue = _sqlServerLiteralUtilities .ConvertSqlServerDefaultValue( property.ClrType, column.DefaultValue); if (defaultExpressionOrValue?.DefaultExpression != null) { propertyBuilder.HasDefaultValueSql(defaultExpressionOrValue.DefaultExpression); } else if (defaultExpressionOrValue != null) { // Note: defaultExpressionOrValue.DefaultValue == null is valid propertyBuilder.HasDefaultValue(defaultExpressionOrValue.DefaultValue); } else { Logger.LogWarning( SqlServerDesignStrings.UnableToConvertDefaultValue( column.DisplayName, column.DefaultValue, property.ClrType, property.Name, property.DeclaringEntityType.Name)); } } return(propertyBuilder); }
public virtual void AddFacetsOnProperty( [NotNull] Property property, [NotNull] TableColumn tableColumn) { Check.NotNull(property, nameof(property)); Check.NotNull(tableColumn, nameof(tableColumn)); property.IsNullable = tableColumn.IsNullable; if (property.Name != tableColumn.ColumnName) { property.Relational().ColumnName = tableColumn.ColumnName; } string typeName = null; if (DataTypesForNumericPrecisionAndScale.Contains(tableColumn.DataType)) { if (tableColumn.NumericPrecision.HasValue) { if (tableColumn.Scale.HasValue) { typeName = tableColumn.DataType + "(" + tableColumn.NumericPrecision.Value + ", " + tableColumn.Scale.Value + ")"; } else { typeName = tableColumn.DataType + "(" + tableColumn.NumericPrecision.Value + ")"; } } } else if (DataTypesForDateTimePrecisionAndScale.Contains(tableColumn.DataType)) { if (tableColumn.DateTimePrecision.HasValue) { if (tableColumn.Scale.HasValue) { typeName = tableColumn.DataType + "(" + tableColumn.DateTimePrecision.Value + ", " + tableColumn.Scale.Value + ")"; } else { typeName = tableColumn.DataType + "(" + tableColumn.DateTimePrecision.Value + ")"; } } } if (typeName != null) { property.Relational().ColumnType = typeName; } if (tableColumn.IsIdentity) { property.ValueGenerated = ValueGenerated.OnAdd; if (typeof(byte) == SqlServerTypeMapping._sqlTypeToClrTypeMap[tableColumn.DataType]) { Logger.LogWarning( SqlServerDesignStrings.DataTypeDoesNotAllowSqlServerIdentityStrategy(tableColumn.Id, tableColumn.DataType)); } else { property.SqlServer().ValueGenerationStrategy = SqlServerValueGenerationStrategy.IdentityColumn; } } if (tableColumn.IsStoreGenerated || tableColumn.DataType == "timestamp") { // timestamp columns should always be treated as store generated // (rowversion columns are stored as data type 'timestamp') property.ValueGenerated = ValueGenerated.OnAddOrUpdate; } if (tableColumn.DefaultValue != null) { var defaultExpressionOrValue = _sqlServerLiteralUtilities .ConvertSqlServerDefaultValue( ((IProperty)property).ClrType, tableColumn.DefaultValue); if (defaultExpressionOrValue != null && defaultExpressionOrValue.DefaultExpression != null) { property.Relational().GeneratedValueSql = defaultExpressionOrValue.DefaultExpression; } else if (defaultExpressionOrValue != null && defaultExpressionOrValue.DefaultValue != null) { property.Relational().DefaultValue = defaultExpressionOrValue.DefaultValue; } else { Logger.LogWarning( SqlServerDesignStrings.UnableToConvertDefaultValue( tableColumn.Id, tableColumn.DefaultValue, ((IProperty)property).ClrType, property.Name, property.DeclaringEntityType.Name)); } } }