2013-07-03 98 views
0

我有两个表。这些是设计和喜欢。一个设计可以有很多喜欢,一个喜欢应该与一个设计有关。使用OneToMany关系删除实体与另一个实体

当我尝试删除它抛出我异常的设计:

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

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

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

+0

不能删除,除非所有的父条目子条目被删除。如果你想删除它们并将其设置为.WillCascadeOnDelete(true); – Ehsan

回答

2

您试图删除仍有子对象的对象。而子对象的外键会给你这个例外。

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

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

+0

WillCascadeOnDelete(true)不起作用。 –

+0

同样的错误?看看生成的是什么sql – JMan

0

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

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

您可以从您的子对象移除现在是无效的外键,或者设置添加一个Deleted/Visible标志,以你的Design如果你想保持Design和相应的DesignLikes

相关问题