Wie deaktiviere ich die Kaskadenlöschung für Verknüpfungstabellen in EF Code-First?
Ich möchte Kaskadenlöschungen für eine Verknüpfungstabelle mit Entity Framework Code-First deaktivieren. Wenn zum Beispiel viele Benutzer viele Rollen haben und ich versuche, eine Rolle zu löschen, möchte ich, dass diese Löschung blockiert wirdes sei denn Dieser Rolle sind derzeit keine Benutzer zugeordnet. Ich entferne bereits die Kaskadenlöschkonvention in meinemOnModelCreating
:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
...
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
Und dann habe ich die Benutzerrollen-Verknüpfungstabelle eingerichtet:
modelBuilder.Entity<User>()
.HasMany(usr => usr.Roles)
.WithMany(role => role.Users)
.Map(m => {
m.ToTable("UsersRoles");
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
});
Wenn EF jedoch die Datenbank erstellt, erstellt es eine Löschkaskade für die Fremdschlüsselbeziehungen, z.
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
Wie kann ich verhindern, dass EF diese Löschkaskade generiert?