Skip to content

Commit e112d82

Browse files
authored
fix: add ON DELETE CASCADE for foreign keys (#585)
Spanner now supports ON DELETE CASCADE actions for foreign keys. This was however not included in the generated migration script is this had been specified in the model or migration. Fixes #583
1 parent 7822ed8 commit e112d82

File tree

5 files changed

+10
-6
lines changed

5 files changed

+10
-6
lines changed

Google.Cloud.EntityFrameworkCore.Spanner.Tests/MigrationTests/GenerateCreateScriptTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public void Generate_Create_Script()
138138
`StartTime` TIMESTAMP NOT NULL,
139139
`SingerId` INT64 NOT NULL,
140140
`Title` STRING(200),
141-
CONSTRAINT `FK_Concerts_Singers` FOREIGN KEY (`SingerId`) REFERENCES `Singers` (`SingerId`),
141+
CONSTRAINT `FK_Concerts_Singers` FOREIGN KEY (`SingerId`) REFERENCES `Singers` (`SingerId`) ON DELETE CASCADE,
142142
CONSTRAINT `FK_Concerts_Venues` FOREIGN KEY (`VenueCode`) REFERENCES `Venues` (`Code`),
143143
)PRIMARY KEY (`VenueCode`, `StartTime`, `SingerId`)
144144
@@ -248,7 +248,7 @@ public void GenerateCreateScriptWithAutoIncrement()
248248
`StartTime` TIMESTAMP NOT NULL,
249249
`SingerId` INT64 NOT NULL,
250250
`Title` STRING(200),
251-
CONSTRAINT `FK_Concerts_Singers` FOREIGN KEY (`SingerId`) REFERENCES `Singers` (`SingerId`),
251+
CONSTRAINT `FK_Concerts_Singers` FOREIGN KEY (`SingerId`) REFERENCES `Singers` (`SingerId`) ON DELETE CASCADE,
252252
CONSTRAINT `FK_Concerts_Venues` FOREIGN KEY (`VenueCode`) REFERENCES `Venues` (`Code`),
253253
)PRIMARY KEY (`VenueCode`, `StartTime`, `SingerId`)
254254
@@ -358,7 +358,7 @@ public void GenerateCreateScriptWithIdentityColumnsDisabled()
358358
`StartTime` TIMESTAMP NOT NULL,
359359
`SingerId` INT64 NOT NULL,
360360
`Title` STRING(200),
361-
CONSTRAINT `FK_Concerts_Singers` FOREIGN KEY (`SingerId`) REFERENCES `Singers` (`SingerId`),
361+
CONSTRAINT `FK_Concerts_Singers` FOREIGN KEY (`SingerId`) REFERENCES `Singers` (`SingerId`) ON DELETE CASCADE,
362362
CONSTRAINT `FK_Concerts_Venues` FOREIGN KEY (`VenueCode`) REFERENCES `Venues` (`Code`),
363363
)PRIMARY KEY (`VenueCode`, `StartTime`, `SingerId`)
364364

Google.Cloud.EntityFrameworkCore.Spanner.Tests/MigrationTests/Migrations/20210309110233_Initial.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ protected override void Up(MigrationBuilder migrationBuilder)
131131
column: x => x.SingerId,
132132
principalTable: "Singers",
133133
principalColumn: "SingerId",
134-
onDelete: ReferentialAction.Restrict);
134+
onDelete: ReferentialAction.Cascade);
135135
table.ForeignKey(
136136
name: "FK_Concerts_Venues",
137137
column: x => x.VenueCode,

Google.Cloud.EntityFrameworkCore.Spanner.Tests/MigrationTests/Models/SpannerMigrationSampleDbContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
7474
entity.HasOne(d => d.Singer)
7575
.WithMany(p => p.Concerts)
7676
.HasForeignKey(d => d.SingerId)
77-
.OnDelete(DeleteBehavior.ClientSetNull)
77+
.OnDelete(DeleteBehavior.Cascade)
7878
.HasConstraintName("FK_Concerts_Singers");
7979

8080
entity.HasOne(d => d.VenueCodeNavigation)

Google.Cloud.EntityFrameworkCore.Spanner.Tests/Migrations/SpannerMigrationSqlGeneratorTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ public virtual void AddColumnOperation_with_defaultValue()
248248
public override void AddForeignKeyOperation_with_name()
249249
{
250250
base.AddForeignKeyOperation_with_name();
251-
AssertSql(@"ALTER TABLE `Album` ADD CONSTRAINT `FK_Album_Singer` FOREIGN KEY (`SingerId`) REFERENCES `Singer` (`SingerId`)
251+
AssertSql(@"ALTER TABLE `Album` ADD CONSTRAINT `FK_Album_Singer` FOREIGN KEY (`SingerId`) REFERENCES `Singer` (`SingerId`) ON DELETE CASCADE
252252
");
253253
}
254254

Google.Cloud.EntityFrameworkCore.Spanner/Migrations/SpannerMigrationsSqlGenerator.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,10 @@ protected override void ForeignKeyConstraint(
320320
.Append(" (")
321321
.Append(ColumnList(operation.PrincipalColumns))
322322
.Append(")");
323+
if (operation.OnDelete == ReferentialAction.Cascade)
324+
{
325+
builder.Append(" ON DELETE CASCADE");
326+
}
323327
}
324328

325329
private static string GetCorrectedColumnType(string columnType, int? maxLength)

0 commit comments

Comments
 (0)