7

我正在尝试在 SQL Server 中的同一个表之间创建多对多关系。

我有一张Object带有列ObjectIdName.

关系遵循以下规则:

  • 一个孩子可以有很多父母
  • 父母可以有很多孩子
  • ObjectA 可以是 ObjectB 的子对象,ObjectB 可以是 ObjectA 的子对象
  • 但一个对象不能是它自己的直接孩子

所以我创建了第二个ObjectRelation带有列ParentId的表ChildId,当然我希望这些关系被级联删除。

但是当我在 SQL Server 中尝试这个时,我得到了错误

在表“tblADMembership”上引入 FOREIGN KEY 约束“FK_ObjectRelation_Object1”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

在 SQL Server Compact 我得到

引用关系将导致不允许的循环引用。

我已经进行了一些研究,并且理解了为什么会出现这些错误,但是有没有办法解决这个问题,也可以在 SQL Server Compact 上运行(所以没有存储过程)?或者有没有更好的方法来模拟这种关系?

4

2 回答 2

2

我自己也遇到过类似的问题......我最终删除了外键。循环删除逻辑被推送到代码。

于 2012-11-02T11:06:34.467 回答
0

我对树视图有类似的问题。这是一个对我有用的删除代码:(我将 id 保存到 value 属性中,我正在使用实体模型框架来删除)也许可以帮助某人

private void removeRecursive(TreeNode parentToDelete)
    {
        foreach (TreeNode tn in parentToDelete.ChildNodes)
            removeRecursive(tn);

        long id = long.Parse(parentToDelete.Value);
        Category deleteCat = context.Categories.Single(x => x.Id ==id);
        context.Categories.DeleteObject(deleteCat);
    }

PD对不起我的英语太糟糕了......

于 2013-05-22T12:17:16.680 回答