Я хочу отключить каскадные удаления для таблицы ссылок с первым кодом сущности. Например, если у многих пользователей много ролей, и я пытаюсь удалить роль, я хочу, чтобы это удаление было заблокировано, если нет пользователей, которые в настоящее время связаны с этой ролью. Я уже удаляю соглашение об исключении каскада в моем 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 этого каскада delete?