正在删除与另一个实体具有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);
我甚至不尝试删除相关实体?为什么我会得到这个例外?
您正试图删除仍有子对象的对象。并且子对象上的外键将为您提供此异常。
在删除当前对象之前,应该先将子对象解耦并将其链接到另一个父对象。或者将它们包含在级联删除中。
在您的情况下,您试图删除的设计至少有一个类似的外键设置为您的设计的id。当您现在删除设计并关闭级联时,它将违反您喜欢的外键约束。
听起来您已经将数据库设置为对DesignLike
表中的DesignId
列强制执行有效的外键约束。
如果您尝试删除一个Design
,那么您正在删除所有DesignLikes
作为外键引用的DesignId
。如果你被允许这样做,你会发现你的数据库处于不一致的状态——如果不能保证它引用了一个有效的记录,你的外键就没有意义了。
如果您希望保留Design
和相应的DesignLikes
,您可以从子对象中删除现在无效的外键,也可以设置向Design
添加Deleted
/Visible
标志