예제 #1
0
        /// <summary>
        /// Generate entity type properties.
        /// </summary>
        /// <param name="entityType">Represents an entity type in an <see cref="T:Microsoft.EntityFrameworkCore.Metadata.IModel" />.</param>
        protected virtual void GenerateProperties(IEntityType entityType)
        {
            if (entityType == null)
            {
                throw new ArgumentNullException(nameof(entityType));
            }

            var properties = new List <Dictionary <string, object> >();

            foreach (var property in entityType.GetProperties().OrderBy(p => p.Scaffolding().ColumnOrdinal))
            {
                _propertyAnnotations = new List <Dictionary <string, object> >();

                if (_useDataAnnotations)
                {
                    GeneratePropertyDataAnnotations(property);
                }

                properties.Add(new Dictionary <string, object>
                {
                    { "property-type", CSharpUtilities.GetTypeName(property.ClrType) },
                    { "property-name", property.Name },
                    { "property-annotations", _propertyAnnotations }
                });
            }

            _templateData.Add("properties", properties);
        }
        private void GenerateSequence(ISequence sequence, IndentedStringBuilder sb)
        {
            var methodName = nameof(RelationalModelBuilderExtensions.HasSequence);

            if (sequence.ClrType != Sequence.DefaultClrType)
            {
                methodName += $"<{CSharpUtilities.GetTypeName(sequence.ClrType)}>";
            }

            var parameters = CSharpUtilities.DelimitString(sequence.Name);

            if (string.IsNullOrEmpty(sequence.Schema) &&
                sequence.Model.Relational().DefaultSchema != sequence.Schema)
            {
                parameters += $", {CSharpUtilities.DelimitString(sequence.Schema)}";
            }

            var lines = new List <string>
            {
                $"modelBuilder.{methodName}({parameters})"
            };

            if (sequence.StartValue != Sequence.DefaultStartValue)
            {
                lines.Add($".{nameof(SequenceBuilder.StartsAt)}({sequence.StartValue})");
            }

            if (sequence.IncrementBy != Sequence.DefaultIncrementBy)
            {
                lines.Add($".{nameof(SequenceBuilder.IncrementsBy)}({sequence.IncrementBy})");
            }

            if (sequence.MinValue != Sequence.DefaultMinValue)
            {
                lines.Add($".{nameof(SequenceBuilder.HasMin)}({sequence.MinValue})");
            }

            if (sequence.MaxValue != Sequence.DefaultMaxValue)
            {
                lines.Add($".{nameof(SequenceBuilder.HasMax)}({sequence.MaxValue})");
            }

            if (sequence.IsCyclic != Sequence.DefaultIsCyclic)
            {
                lines.Add($".{nameof(SequenceBuilder.IsCyclic)}()");
            }

            if (lines.Count == 2)
            {
                lines = new List <string>
                {
                    lines[0] + lines[1]
                };
            }

            sb.AppendLine();
            sb.Append(lines[0]);

            using (sb.Indent())
            {
                foreach (var line in lines.Skip(1))
                {
                    sb.AppendLine();
                    sb.Append(line);
                }
            }

            sb.AppendLine(";");
        }
예제 #3
0
        /// <summary>
        ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///     directly from your code. This API may change or be removed in future releases.
        /// </summary>
        public virtual void AddSequenceConfigurations()
        {
            _sequenceConfigurations = new List <SequenceConfiguration>();
            foreach (var sequence in AnnotationProvider.For(Model).Sequences)
            {
                var config = _configurationFactory.CreateSequenceConfiguration();

                config.NameIdentifier = CSharpUtilities.DelimitString(sequence.Name);

                if (sequence.ClrType != Sequence.DefaultClrType)
                {
                    config.TypeIdentifier = CSharpUtilities.GetTypeName(sequence.ClrType);
                }

                if (!string.IsNullOrEmpty(sequence.Schema) &&
                    AnnotationProvider.For(Model).DefaultSchema != sequence.Schema)
                {
                    config.SchemaNameIdentifier = CSharpUtilities.DelimitString(sequence.Schema);
                }

                if (sequence.StartValue != Sequence.DefaultStartValue)
                {
                    config.FluentApiConfigurations.Add(
                        _configurationFactory.CreateFluentApiConfiguration(
                            false,
                            nameof(RelationalSequenceBuilder.StartsAt),
                            sequence.StartValue.ToString(CultureInfo.InvariantCulture)));
                }
                if (sequence.IncrementBy != Sequence.DefaultIncrementBy)
                {
                    config.FluentApiConfigurations.Add(
                        _configurationFactory.CreateFluentApiConfiguration(
                            false,
                            nameof(RelationalSequenceBuilder.IncrementsBy),
                            sequence.IncrementBy.ToString(CultureInfo.InvariantCulture)));
                }

                if (sequence.MinValue != Sequence.DefaultMinValue)
                {
                    config.FluentApiConfigurations.Add(
                        _configurationFactory.CreateFluentApiConfiguration(
                            false,
                            nameof(RelationalSequenceBuilder.HasMin),
                            sequence.MinValue?.ToString(CultureInfo.InvariantCulture) ?? ""));
                }

                if (sequence.MaxValue != Sequence.DefaultMaxValue)
                {
                    config.FluentApiConfigurations.Add(
                        _configurationFactory.CreateFluentApiConfiguration(
                            false,
                            nameof(RelationalSequenceBuilder.HasMax),
                            sequence.MaxValue?.ToString(CultureInfo.InvariantCulture) ?? ""));
                }

                if (sequence.IsCyclic != Sequence.DefaultIsCyclic)
                {
                    config.FluentApiConfigurations.Add(
                        _configurationFactory.CreateFluentApiConfiguration(
                            false,
                            nameof(RelationalSequenceBuilder.IsCyclic)));
                }

                _sequenceConfigurations.Add(config);
            }
        }