【问题标题】:can not remove circular dependent objects in Entity Framework无法删除实体框架中的循环依赖对象
【发布时间】:2018-06-08 02:51:29
【问题描述】:

我有两个表相互循环引用(你可以在图片中看到 FK 和 PK) (在 otherprotectionItems 表中,我有一个来自 Document 的列,并且文档中的该记录与 otherprotectionItem 表和外键相关。第一个关系是删除时的 NO ACTION,第二个关系是删除时的 CASCADE) 当我想删除 otherprotectionItem 表中的一行时,我遇到了这个问题。

错误:

无法确定相关操作的有效顺序。由于外键约束、模型要求或存储生成的值,可能存在依赖关系。

【问题讨论】:

    标签: entity-framework cascade circular-reference


    【解决方案1】:

    请注意,我有这个解决方案。但我更喜欢有更好的。否则这就是答案。 我将手动删除文档,将更改保存在数据库中。然后删除OtherprotectionItem表记录

    Data.Util.DocumentFinder.FindRecursive(item)
                            .ToList()
                            .ForEach(d => db.Entry(d).State = System.Data.Entity.EntityState.Deleted);
                        db.SaveChanges();
    
     db.OtherProtectionItems.Remove(item);
                        db.SaveChanges();
    

    注意:这个 FindRecursive 是我创建的一个函数,它会迭代所有文档并查找与此 OtherprotectionItem 记录相关的所有文档

    【讨论】:

    • 您以错误的方式映射 MANY-TO-MANY 关系不应该是这样,必须有一个联结表
    • @IrshadAhmed 感谢您的回复。这些表是以前创建的,我现在无法进行任何更改。我必须使用当前的结构。
    • 嗯……我认为 .AsNoTracking() 会节省你的时间,而不是在代码中做那么多
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多