Skip to content

Commit a2eb1bb

Browse files
committed
Fixes to database collation migrations
Fixes #23794
1 parent 6ef52c7 commit a2eb1bb

File tree

3 files changed

+55
-2
lines changed

3 files changed

+55
-2
lines changed

Diff for: src/EFCore.Design/Migrations/Design/CSharpMigrationOperationGenerator.cs

+12-1
Original file line numberDiff line numberDiff line change
@@ -724,20 +724,31 @@ protected virtual void Generate([NotNull] AlterDatabaseOperation operation, [Not
724724

725725
using (builder.Indent())
726726
{
727+
var needComma = false;
728+
727729
if (operation.Collation != null)
728730
{
729731
builder
730732
.AppendLine()
731733
.Append("collation: ")
732734
.Append(Code.Literal(operation.Collation));
735+
736+
needComma = true;
733737
}
734738

735739
if (operation.OldDatabase.Collation != null)
736740
{
741+
if (needComma)
742+
{
743+
builder.Append(",");
744+
}
745+
737746
builder
738-
.AppendLine(",")
747+
.AppendLine()
739748
.Append("oldCollation: ")
740749
.Append(Code.Literal(operation.OldDatabase.Collation));
750+
751+
needComma = true;
741752
}
742753

743754
builder.Append(")");

Diff for: src/EFCore.Relational/Migrations/MigrationBuilder.cs

+8-1
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,14 @@ public virtual AlterOperationBuilder<AlterDatabaseOperation> AlterDatabase(
477477
[CanBeNull] string collation = null,
478478
[CanBeNull] string oldCollation = null)
479479
{
480-
var operation = new AlterDatabaseOperation { Collation = collation };
480+
var operation = new AlterDatabaseOperation
481+
{
482+
Collation = collation,
483+
OldDatabase =
484+
{
485+
Collation = oldCollation
486+
}
487+
};
481488
Operations.Add(operation);
482489

483490
return new AlterOperationBuilder<AlterDatabaseOperation>(operation);

Diff for: test/EFCore.Design.Tests/Migrations/Design/CSharpMigrationOperationGeneratorTest.cs

+35
Original file line numberDiff line numberDiff line change
@@ -804,11 +804,46 @@ public void AlterDatabaseOperation()
804804
+ " .OldAnnotation(\"bar\", \"foo\");",
805805
o =>
806806
{
807+
Assert.Equal("Some collation", o.Collation);
808+
Assert.Equal("Some other collation", o.OldDatabase.Collation);
807809
Assert.Equal("bar", o["foo"]);
808810
Assert.Equal("foo", o.OldDatabase["bar"]);
809811
});
810812
}
811813

814+
[ConditionalFact]
815+
public void AlterDatabaseOperation_with_default_old_collation()
816+
{
817+
Test(
818+
new AlterDatabaseOperation { Collation = "Some collation" },
819+
"mb.AlterDatabase("
820+
+ _eol
821+
+ " collation: \"Some collation\");",
822+
o =>
823+
{
824+
Assert.Equal("Some collation", o.Collation);
825+
Assert.Null(o.OldDatabase.Collation);
826+
});
827+
}
828+
829+
[ConditionalFact]
830+
public void AlterDatabaseOperation_with_default_new_collation()
831+
{
832+
Test(
833+
new AlterDatabaseOperation
834+
{
835+
OldDatabase = { Collation = "Some collation" }
836+
},
837+
"mb.AlterDatabase("
838+
+ _eol
839+
+ " oldCollation: \"Some collation\");",
840+
o =>
841+
{
842+
Assert.Null(o.Collation);
843+
Assert.Equal("Some collation", o.OldDatabase.Collation);
844+
});
845+
}
846+
812847
[ConditionalFact]
813848
public void AlterSequenceOperation_required_args()
814849
{

0 commit comments

Comments
 (0)