Jak wyłączyć kasowanie kaskadowe dla tabel linków w kodzie EF?
Chcę wyłączyć kasowanie kaskadowe dla tabeli łączy z kodem frameworka encji - najpierw. Na przykład, jeśli wielu użytkowników ma wiele ról i próbuję usunąć rolę, chcę, aby to usunięcie zostało zablokowanechyba że nie ma obecnie użytkowników powiązanych z tą rolą. Usunąłem już konwencję kaskadowego usuwaniaOnModelCreating
:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
...
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
Następnie ustawiam tabelę linków do roli użytkownika:
modelBuilder.Entity<User>()
.HasMany(usr => usr.Roles)
.WithMany(role => role.Users)
.Map(m => {
m.ToTable("UsersRoles");
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
});
Jednak gdy EF tworzy bazę danych, tworzy kaskadę usuwania dla relacji klucza obcego, np.
ALTER TABLE [dbo].[UsersRoles] WITH CHECK ADD CONSTRAINT [FK_dbo.UsersRoles_dbo.User_UserId] FOREIGN KEY([UserId])
REFERENCES [dbo].[User] ([UserId])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[UsersRoles] WITH CHECK ADD CONSTRAINT [FK_dbo.UsersRoles_dbo.Role_RoleId] FOREIGN KEY([RoleId])
REFERENCES [dbo].[Role] ([RoleId])
ON DELETE CASCADE
GO
Jak mogę zatrzymać EF generując tę kaskadę usuwania?