I have a many-to-many relationship between three tables as shown.
when I apply migration to build and seed the phisical database I get that error
Introducing FOREIGN KEY constraint 'FK_Rooms_postSubjects_postSubjectId' on table 'Rooms' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint or index.
these three tables are implemented using Entity Framework Models and seeded to be cascaded on deletion as follows
First: the three models (PostSubject, Room, AppUser)
PostSubject
public class PostSubject
{
[Key]
public Guid Id { get; set; }
// ... some props
public virtual List<Room> rooms { get; set; }
public string authorId { get; set; }
[ForeignKey("authorId")]
public virtual AppUser author { get; set; }
}
Room
public class Room
{
public Guid Id { get; set; }
#nullable enable
public Guid? postSubjectId { get; set; }
[ForeignKey("postSubjectId")]
public PostSubject? postSubject { get; set; }
#nullable enable
public string? MemberId { get; set; }
[ForeignKey("MemberId")]
public AppUser? Member { get; set; }
}
AppUser
public class AppUser: IdentityUser
{
// ... some props
public List<Room> rooms { get; set; }
public List<PostSubject> postSubjects { get; set; }
}
Second: the seeding logic to cascade deletion
// delete one postSubject should be followed with deleting all related rooms
builder.Entity<Room>().HasOne(i => i.postSubject)
.WithMany(c => c.rooms)
.OnDelete(DeleteBehavior.Cascade);
// delete one user should be followed with deleting all related rooms
builder.Entity<Room>().HasOne(i => i.Member)
.WithMany(c => c.rooms)
.OnDelete(DeleteBehavior.Cascade);
// delete one user should be followed with deleting all related postSubjects
builder.Entity<PostSubject>().HasOne(i => i.author)
.WithMany(c => c.postSubjects) // IsRequired means it's necessary to have the relation
.OnDelete(DeleteBehavior.Cascade);