protected virtual RelationalSequenceBuilder VisitSequence([NotNull] ModelBuilder modelBuilder, [NotNull] SequenceModel sequence) { Check.NotNull(modelBuilder, nameof(modelBuilder)); Check.NotNull(sequence, nameof(sequence)); if (string.IsNullOrEmpty(sequence.Name)) { Logger.LogWarning( RelationalDesignEventId.SequenceMustBeNamedWarning, () => RelationalDesignStrings.SequencesRequireName); return(null); } Type sequenceType = null; if (sequence.DataType != null) { sequenceType = TypeMapper.FindMapping(sequence.DataType)?.ClrType; } if (sequenceType != null && !Sequence.SupportedTypes.Contains(sequenceType)) { Logger.LogWarning( RelationalDesignEventId.SequenceTypeNotSupportedWarning, () => RelationalDesignStrings.BadSequenceType(sequence.Name, sequence.DataType)); return(null); } var builder = sequenceType != null ? modelBuilder.HasSequence(sequenceType, sequence.Name, sequence.SchemaName) : modelBuilder.HasSequence(sequence.Name, sequence.SchemaName); if (sequence.IncrementBy.HasValue) { builder.IncrementsBy(sequence.IncrementBy.Value); } if (sequence.Max.HasValue) { builder.HasMax(sequence.Max.Value); } if (sequence.Min.HasValue) { builder.HasMin(sequence.Min.Value); } if (sequence.Start.HasValue) { builder.StartsAt(sequence.Start.Value); } if (sequence.IsCyclic.HasValue) { builder.IsCyclic(sequence.IsCyclic.Value); } return(builder); }
public void Sequences() { using (var scratch = SqlServerTestStore.Create("SqlServerE2E")) { scratch.ExecuteNonQuery(@" CREATE SEQUENCE CountByTwo START WITH 1 INCREMENT BY 2; CREATE SEQUENCE CyclicalCountByThree START WITH 6 INCREMENT BY 3 MAXVALUE 27 MINVALUE 0 CYCLE; CREATE SEQUENCE TinyIntSequence AS tinyint START WITH 1; CREATE SEQUENCE SmallIntSequence AS smallint START WITH 1; CREATE SEQUENCE IntSequence AS int START WITH 1; CREATE SEQUENCE DecimalSequence AS decimal; CREATE SEQUENCE NumericSequence AS numeric;"); var configuration = new ReverseEngineeringConfiguration { ConnectionString = scratch.ConnectionString, ProjectPath = TestProjectDir + Path.DirectorySeparatorChar, ProjectRootNamespace = TestNamespace, ContextClassName = "SequenceContext" }; var expectedFileSet = new FileSet(new FileSystemFileService(), Path.Combine("ReverseEngineering", "Expected"), contents => contents.Replace("{{connectionString}}", scratch.ConnectionString)) { Files = new List <string> { "SequenceContext.expected" } }; var filePaths = Generator.GenerateAsync(configuration).GetAwaiter().GetResult(); var actualFileSet = new FileSet(InMemoryFiles, Path.GetFullPath(TestProjectDir)) { Files = new[] { filePaths.ContextFile }.Concat(filePaths.EntityTypeFiles).Select(Path.GetFileName).ToList() }; AssertLog(new LoggerMessages { Warn = { RelationalDesignStrings.BadSequenceType("DecimalSequence", "decimal"), RelationalDesignStrings.BadSequenceType("NumericSequence", "numeric") } }); AssertEqualFileContents(expectedFileSet, actualFileSet); AssertCompile(actualFileSet); } }