gpt4 book ai didi

c# - 如何禁用 EF 代码优先中链接表的级联删除?

转载 作者:行者123 更新时间:2023-11-30 18:13:00 25 4
gpt4 key购买 nike

我想禁用 Entity Framework 代码优先链接表的级联删除。例如,如果很多用户有很多角色,而我试图删除一个角色,我希望阻止删除,除非当前没有用户与该角色相关联。我已经在我的 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 生成此删除级联?

最佳答案

我得到了答案。 :-) 这些级联删除是由于 ManyToManyCascadeDeleteConvention 而创建的。您需要删除此约定以防止它为链接表创建级联删除:

modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();

关于c# - 如何禁用 EF 代码优先中链接表的级联删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54086760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com