Как отключить каскадное удаление таблиц ссылок в EF code-first?
Я хочу, чтобы отключить каскадное удаление для таблицы ссылок с кодом структуры лица в первую очередь. Например, если у многих пользователей много ролей, и я пытаюсь удалить роль, я хочу, чтобы это удаление было заблокировано.если в настоящее время нет пользователей, связанных с этой ролью. Я уже удаляю соглашение каскадного удаления в моемOnModelCreating
:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
...
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
И тогда я настроил таблицу ссылок ролей пользователей:
modelBuilder.Entity<User>()
.HasMany(usr => usr.Roles)
.WithMany(role => role.Users)
.Map(m => {
m.ToTable("UsersRoles");
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
});
Тем не менее, когда EF создает базу данных, он создает каскад удаления для отношений внешнего ключа, например.
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
Как я могу остановить EF, генерирующий этот каскад удаления?