使用与另一个实体的OneToMany关系删除实体

时间:2013-07-03 09:10:34

标签: c# .net entity-framework entity-framework-5

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

当我尝试删除一个Design时,它会抛出异常:

  

DELETE语句与REFERENCE约束冲突   “FK_dbo.DesignLike_dbo.Design_DesignId”。冲突发生在   数据库“XXXDB”,表“dbo.DesignLike”,列'DesignId'。该   声明已被终止。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

听起来您已设置数据库以在DesignId表的DesignLike列上强制执行有效的外键约束。

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

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