EntityFrameworkCode-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がこの削除カスケードを生成するのを停止するにはどうすればよいですか?