正在删除与另一个实体具有OneToMany关系的实体

本文关键字:实体 OneToMany 关系 删除 另一个 | 更新日期: 2023-09-27 18:20:46

我有两个表。这些是设计和喜欢。一个设计可以有很多赞,一个赞应该与一个设计相关。

当我试图删除一个设计时,它会给我一个异常:

DELETE语句与REFERENCE约束冲突"FK_dbo.DesignLike_dbo.DDesign_DesignId"。冲突发生在数据库"XXXDB",表"dbo.DesignLike",列"DesignId"。这个语句已终止。

modelBuilder.Entity().HasMany(x=>x.Likes).WithRequired(x=>x.Design).WillCascadeDelete(false);

我甚至不尝试删除相关实体?为什么我会得到这个例外?

正在删除与另一个实体具有OneToMany关系的实体

您正试图删除仍有子对象的对象。并且子对象上的外键将为您提供此异常。

在删除当前对象之前,应该先将子对象解耦并将其链接到另一个父对象。或者将它们包含在级联删除中。

在您的情况下,您试图删除的设计至少有一个类似的外键设置为您的设计的id。当您现在删除设计并关闭级联时,它将违反您喜欢的外键约束。

听起来您已经将数据库设置为对DesignLike表中的DesignId列强制执行有效的外键约束。

如果您尝试删除一个Design,那么您正在删除所有DesignLikes作为外键引用的DesignId。如果你被允许这样做,你会发现你的数据库处于不一致的状态——如果不能保证它引用了一个有效的记录,你的外键就没有意义了。

如果您希望保留Design和相应的DesignLikes ,您可以从子对象中删除现在无效的外键,也可以设置向Design添加Deleted/Visible标志