private void CreateProperties(Entity entity, IEnumerable <DatabaseColumn> columns) { foreach (var column in columns) { var table = column.Table; var mapping = _typeMapper.FindMapping(column.StoreType); if (mapping == null) { _logger.LogWarning("Failed to map type {storeType} for {column}.", column.StoreType, column.Name); continue; } var property = entity.Properties.ByColumn(column.Name); if (property == null) { property = new Property { Entity = entity, ColumnName = column.Name }; entity.Properties.Add(property); } string propertyName = ToPropertyName(entity.EntityClass, column.Name); propertyName = _namer.UniqueName(entity.EntityClass, propertyName); property.PropertyName = propertyName; property.IsNullable = column.IsNullable; property.IsRowVersion = column.IsRowVersion(); property.IsPrimaryKey = table.PrimaryKey?.Columns.Contains(column) == true; property.IsForeignKey = table.ForeignKeys.Any(c => c.Columns.Contains(column)); property.IsUnique = table.UniqueConstraints.Any(c => c.Columns.Contains(column)) || table.Indexes.Where(i => i.IsUnique).Any(c => c.Columns.Contains(column)); property.Default = column.DefaultValueSql; property.ValueGenerated = column.ValueGenerated; if (property.ValueGenerated == null && !string.IsNullOrWhiteSpace(column.ComputedColumnSql)) { property.ValueGenerated = ValueGenerated.OnAddOrUpdate; } property.StoreType = mapping.StoreType; property.NativeType = mapping.StoreTypeNameBase; property.DataType = mapping.DbType ?? DbType.AnsiString; property.SystemType = mapping.ClrType; property.Size = mapping.Size; property.IsProcessed = true; } entity.Properties.IsProcessed = true; }
private void CreateProperties(Entity entity, IEnumerable <DatabaseColumn> columns) { foreach (var column in columns) { if (IsIgnored(column.Name, _options.Data.Entity)) { continue; } var table = column.Table; var property = entity.Properties.ByColumn(column.Name); if (property == null) { property = new Property { Entity = entity, ColumnName = column.Name }; entity.Properties.Add(property); } string propertyName = ToPropertyName(entity.EntityClass, column.Name); propertyName = _namer.UniqueName(entity.EntityClass, propertyName); property.PropertyName = propertyName; property.IsNullable = column.IsNullable; property.IsRowVersion = column.ValueGenerated == ValueGenerated.OnAddOrUpdate && (bool?)column[ScaffoldingAnnotationNames.ConcurrencyToken] == true; property.IsPrimaryKey = table.PrimaryKey?.Columns.Contains(column) == true; property.IsForeignKey = table.ForeignKeys.Any(c => c.Columns.Contains(column)); property.IsUnique = table.UniqueConstraints.Any(c => c.Columns.Contains(column)) || table.Indexes.Where(i => i.IsUnique).Any(c => c.Columns.Contains(column)); property.Default = column.DefaultValueSql; property.ValueGenerated = column.ValueGenerated; var mapping = _typeMapper.ParseType(column.StoreType); property.StoreType = mapping.StoreType; property.NativeType = mapping.NativeType; property.DataType = mapping.DataType; property.SystemType = mapping.SystemType; property.IsMaxLength = mapping.IsMaxLength; property.Size = mapping.Size; property.Precision = mapping.Precision; property.Scale = mapping.Scale; property.IsProcessed = true; } entity.Properties.IsProcessed = true; }