11using JetBrains . Annotations ;
22using JsonApiDotNetCoreExample . Models ;
33using Microsoft . EntityFrameworkCore ;
4+ using Microsoft . EntityFrameworkCore . Metadata ;
45
56// @formatter:wrap_chained_method_calls chop_always
67
@@ -18,14 +19,33 @@ public AppDbContext(DbContextOptions<AppDbContext> options)
1819
1920 protected override void OnModelCreating ( ModelBuilder builder )
2021 {
21- // When deleting a person, un-assign him/her from existing todo items.
22+ // When deleting a person, un-assign him/her from existing todo- items.
2223 builder . Entity < Person > ( )
2324 . HasMany ( person => person . AssignedTodoItems )
24- . WithOne ( todoItem => todoItem . Assignee ! ) ;
25+ . WithOne ( todoItem => todoItem . Assignee ) ;
2526
26- // When deleting a person, the todo items he/she owns are deleted too.
27- builder . Entity < TodoItem > ( )
28- . HasOne ( todoItem => todoItem . Owner )
29- . WithMany ( ) ;
27+ // When deleting a person, the todo-items he/she owns are deleted too.
28+ builder . Entity < Person > ( )
29+ . HasMany ( person => person . OwnedTodoItems )
30+ . WithOne ( todoItem => todoItem . Owner ) ;
31+
32+ AdjustDeleteBehaviorForJsonApi ( builder ) ;
33+ }
34+
35+ private static void AdjustDeleteBehaviorForJsonApi ( ModelBuilder builder )
36+ {
37+ foreach ( IMutableForeignKey foreignKey in builder . Model . GetEntityTypes ( )
38+ . SelectMany ( entityType => entityType . GetForeignKeys ( ) ) )
39+ {
40+ if ( foreignKey . DeleteBehavior == DeleteBehavior . ClientSetNull )
41+ {
42+ foreignKey . DeleteBehavior = DeleteBehavior . SetNull ;
43+ }
44+
45+ if ( foreignKey . DeleteBehavior == DeleteBehavior . ClientCascade )
46+ {
47+ foreignKey . DeleteBehavior = DeleteBehavior . Cascade ;
48+ }
49+ }
3050 }
3151}
0 commit comments