From 4e68ad1ca0f2bd80dd5a3b8c061a526ed26d44d1 Mon Sep 17 00:00:00 2001 From: Andriy Svyryd Date: Thu, 2 Sep 2021 19:35:02 -0700 Subject: [PATCH] Convert Int32 identity seed value Fixes #25589 --- .../Internal/SnapshotModelProcessor.cs | 42 +++++++++++++++++++ .../Design/SnapshotModelProcessorTest.cs | 6 ++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/EFCore.Design/Migrations/Internal/SnapshotModelProcessor.cs b/src/EFCore.Design/Migrations/Internal/SnapshotModelProcessor.cs index d9b412ca239..284ff14c68f 100644 --- a/src/EFCore.Design/Migrations/Internal/SnapshotModelProcessor.cs +++ b/src/EFCore.Design/Migrations/Internal/SnapshotModelProcessor.cs @@ -82,6 +82,14 @@ public SnapshotModelProcessor( return _modelRuntimeInitializer.Initialize((IModel)model, designTime: true, validationLogger: null); } + private void ProcessCollection(IEnumerable metadata, string version) + { + foreach (var element in metadata) + { + ProcessElement(element, version); + } + } + private void ProcessCollection(IEnumerable metadata, string version) { foreach (var element in metadata) @@ -90,6 +98,23 @@ private void ProcessCollection(IEnumerable metadata, strin } } + private void ProcessElement(IReadOnlyModel model, string version) + { + ProcessElement((IReadOnlyAnnotatable)model, version); + + if ((version.StartsWith("3.", StringComparison.Ordinal) + || version.StartsWith("5.", StringComparison.Ordinal)) + && model is IMutableModel mutableModel) + { + var seed = model["SqlServer:IdentitySeed"]; + if (seed != null + && seed is int intSeed) + { + mutableModel["SqlServer:IdentitySeed"] = (long)intSeed; + } + } + } + private void ProcessElement(IReadOnlyEntityType entityType, string version) { ProcessElement((IReadOnlyAnnotatable)entityType, version); @@ -103,6 +128,23 @@ private void ProcessElement(IReadOnlyEntityType entityType, string version) } } + private void ProcessElement(IReadOnlyProperty property, string version) + { + ProcessElement((IReadOnlyAnnotatable)property, version); + + if ((version.StartsWith("3.", StringComparison.Ordinal) + || version.StartsWith("5.", StringComparison.Ordinal)) + && property is IMutableProperty mutableProperty) + { + var seed = property["SqlServer:IdentitySeed"]; + if (seed != null + && seed is int intSeed) + { + mutableProperty["SqlServer:IdentitySeed"] = (long)intSeed; + } + } + } + private void ProcessElement(IReadOnlyAnnotatable? metadata, string version) { if (version.StartsWith("1.", StringComparison.Ordinal) diff --git a/test/EFCore.Design.Tests/Migrations/Design/SnapshotModelProcessorTest.cs b/test/EFCore.Design.Tests/Migrations/Design/SnapshotModelProcessorTest.cs index c4f6fb72df5..f8b5438e6fb 100644 --- a/test/EFCore.Design.Tests/Migrations/Design/SnapshotModelProcessorTest.cs +++ b/test/EFCore.Design.Tests/Migrations/Design/SnapshotModelProcessorTest.cs @@ -1084,7 +1084,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder .HasAnnotation("ProductVersion", "3.0.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn) + .HasAnnotation("SqlServer:IdentitySeed", 1); modelBuilder.Entity( "Ownership.OwningType1", b => @@ -1092,7 +1093,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn) + .HasAnnotation("SqlServer:IdentitySeed", 1); b.HasKey("Id");