【问题标题】:Deleting Entity with OneToMany Relationship With Another Entity删除与另一个实体具有 OneToMany 关系的实体
【发布时间】:2013-07-03 09:10:34
【问题描述】:

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

当我尝试删除设计时,它会抛出异常:

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

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

我什至不尝试删除相关实体?为什么会出现这个异常?

【问题讨论】:

  • 您不能删除父条目,除非所有子条目都被删除。如果你想删除它们而不是将其设置为 .WillCascadeOnDelete(true);

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


【解决方案1】:

您正在尝试删除仍具有子对象的对象。子对象上的外键会给你这个异常。

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

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

【讨论】:

    【解决方案2】:

    听起来您已将数据库设置为对 DesignLike 表中的 DesignId 列实施有效的外键约束。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      相关资源
      最近更新 更多