protected virtual PropertyBuilder VisitColumn([NotNull] EntityTypeBuilder builder, [NotNull] ColumnModel column) { Check.NotNull(builder, nameof(builder)); Check.NotNull(column, nameof(column)); RelationalTypeMapping mapping; if (!_typeMapper.TryGetMapping(column.DataType, out mapping) || mapping.ClrType == null) { Logger.LogWarning(RelationalDesignStrings.CannotFindTypeMappingForColumn(column.DisplayName, column.DataType)); return(null); } var clrType = (column.IsNullable) ? mapping.ClrType.MakeNullable() : mapping.ClrType; var property = builder.Property(clrType, GetPropertyName(column)); if (_typeMapper.GetMapping(property.Metadata).DefaultTypeName != column.DataType && !string.IsNullOrWhiteSpace(column.DataType)) { property.HasColumnType(column.DataType); } property.HasColumnName(column.Name); if (column.MaxLength.HasValue) { property.HasMaxLength(column.MaxLength.Value); } if (column.ValueGenerated == ValueGenerated.OnAdd) { property.ValueGeneratedOnAdd(); } if (column.ValueGenerated == ValueGenerated.OnAddOrUpdate) { property.ValueGeneratedOnAddOrUpdate(); } if (column.DefaultValue != null) { property.HasDefaultValueSql(column.DefaultValue); } if (!column.PrimaryKeyOrdinal.HasValue) { property.IsRequired(!column.IsNullable); } return(property); }