Skip to content

Commit 76fe355

Browse files
committed
Update to never make base-linking FKs ClientCascade.
1 parent 4c5c7d3 commit 76fe355

File tree

3 files changed

+15
-21
lines changed

3 files changed

+15
-21
lines changed

src/EFCore.SqlServer/Metadata/Conventions/SqlServerOnDeleteConvention.cs

+11-17
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,6 @@ protected override DeleteBehavior GetTargetDeleteBehavior(IConventionForeignKey
5757
return deleteBehavior;
5858
}
5959

60-
if (foreignKey.IsBaseLinking()
61-
&& IsMappedToSameTable(foreignKey.DeclaringEntityType, foreignKey.PrincipalEntityType))
62-
{
63-
return DeleteBehavior.ClientCascade;
64-
}
65-
6660
return ProcessSkipNavigations(foreignKey.GetReferencingSkipNavigations()) ?? deleteBehavior;
6761
}
6862

@@ -105,23 +99,23 @@ protected override DeleteBehavior GetTargetDeleteBehavior(IConventionForeignKey
10599
DeleteBehavior DefaultDeleteBehavior(IConventionSkipNavigation conventionSkipNavigation)
106100
=> conventionSkipNavigation.ForeignKey!.IsRequired ? DeleteBehavior.Cascade : DeleteBehavior.ClientSetNull;
107101

102+
bool IsMappedToSameTable(IConventionEntityType entityType1, IConventionEntityType entityType2)
103+
{
104+
var tableName1 = entityType1.GetTableName();
105+
var tableName2 = entityType2.GetTableName();
106+
107+
return tableName1 != null
108+
&& tableName2 != null
109+
&& tableName1 == tableName2
110+
&& entityType1.GetSchema() == entityType2.GetSchema();
111+
}
112+
108113
bool IsFirstSkipNavigation(IConventionSkipNavigation navigation)
109114
=> navigation.DeclaringEntityType != navigation.TargetEntityType
110115
? string.Compare(navigation.DeclaringEntityType.Name, navigation.TargetEntityType.Name, StringComparison.Ordinal) < 0
111116
: string.Compare(navigation.Name, navigation.Inverse!.Name, StringComparison.Ordinal) < 0;
112117
}
113118

114-
private bool IsMappedToSameTable(IConventionEntityType entityType1, IConventionEntityType entityType2)
115-
{
116-
var tableName1 = entityType1.GetTableName();
117-
var tableName2 = entityType2.GetTableName();
118-
119-
return tableName1 != null
120-
&& tableName2 != null
121-
&& tableName1 == tableName2
122-
&& entityType1.GetSchema() == entityType2.GetSchema();
123-
}
124-
125119
/// <inheritdoc />
126120
public virtual void ProcessEntityTypeAnnotationChanged(
127121
IConventionEntityTypeBuilder entityTypeBuilder,

test/EFCore.Design.Tests/Migrations/ModelSnapshotSqlServerTest.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,7 @@ public virtual void Entity_splitting_is_stored_in_snapshot_with_tables()
832832
b.HasOne(""Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+Order"", null)
833833
.WithOne()
834834
.HasForeignKey(""Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+Order"", ""Id"")
835-
.OnDelete(DeleteBehavior.ClientCascade)
835+
.OnDelete(DeleteBehavior.Cascade)
836836
.IsRequired();
837837
838838
b.OwnsOne(""Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+OrderDetails"", ""OrderBillingDetails"", b1 =>
@@ -863,7 +863,7 @@ public virtual void Entity_splitting_is_stored_in_snapshot_with_tables()
863863
b1.HasOne(""Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+Order.OrderBillingDetails#Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+OrderDetails"", null)
864864
.WithOne()
865865
.HasForeignKey(""Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+Order.OrderBillingDetails#Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+OrderDetails"", ""OrderId"")
866-
.OnDelete(DeleteBehavior.ClientCascade)
866+
.OnDelete(DeleteBehavior.Cascade)
867867
.IsRequired();
868868
869869
b1.OwnsOne(""Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+StreetAddress"", ""StreetAddress"", b2 =>
@@ -912,7 +912,7 @@ public virtual void Entity_splitting_is_stored_in_snapshot_with_tables()
912912
b1.HasOne(""Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+Order.OrderShippingDetails#Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+OrderDetails"", null)
913913
.WithOne()
914914
.HasForeignKey(""Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+Order.OrderShippingDetails#Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+OrderDetails"", ""OrderId"")
915-
.OnDelete(DeleteBehavior.ClientCascade)
915+
.OnDelete(DeleteBehavior.Cascade)
916916
.IsRequired();
917917
918918
b1.OwnsOne(""Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+StreetAddress"", ""StreetAddress"", b2 =>

test/EFCore.Design.Tests/Scaffolding/Internal/CSharpRuntimeModelCodeGeneratorTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1340,7 +1340,7 @@ public static RuntimeForeignKey CreateForeignKey2(RuntimeEntityType declaringEnt
13401340
var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty(""PrincipalBaseId"")!, declaringEntityType.FindProperty(""PrincipalBaseAlternateId"")! },
13411341
principalEntityType.FindKey(new[] { principalEntityType.FindProperty(""PrincipalBaseId"")!, principalEntityType.FindProperty(""PrincipalBaseAlternateId"")! })!,
13421342
principalEntityType,
1343-
deleteBehavior: DeleteBehavior.ClientCascade,
1343+
deleteBehavior: DeleteBehavior.Cascade,
13441344
unique: true,
13451345
required: true,
13461346
requiredDependent: true);

0 commit comments

Comments
 (0)