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;
        }
Exemplo n.º 2
0
        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;
        }