- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Child 表,它有引用另外两个表 Parent1 和 Parent2 的外键(这些不是这些表的真实名称)。 Parent1 和 Parent2 都与祖 parent 具有一对多关系。 Child 表是一个在 Parent1 和 Parent2 之间建立多对多关系的连接表,但作为它自己的“映射实体”暴露给 Breeze。
我在这两个外键上都设置了级联删除,当我从 SQL Server Management Studio 中删除 Parent1 或 Parent2 表中的一行时,级联正常工作并且子表中的相应行被删除。
但是,当我使用 Breeze 在我的应用程序中执行以下代码时
function removeParent1(grandParent, parent1) {
var index = grandParent.parent1s.indexOf(parent1);
grandParent.parent1s.splice(index, 1);
parent1.entityAspect.setDeleted();
}
我收到以下异常。
An exception of type 'System.Exception' occurred in Breeze.ContextProvider.dll but was not handled in user code
Additional information: The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_dbo.Child_dbo.Parent1_Parent1Id". The conflict occurred in database "DB", table "dbo.Parent1", column 'Id'.
The statement has been terminated.
我不知道发生了什么。 Breeze 是否尝试使用 NULL 外键更新子行?
最佳答案
Breeze 尚不支持自动级联删除。但是,您可以在代码中执行此类删除。基本上,当您删除父项及其关联的子项时,您有两种选择,执行这些操作的顺序对该过程有重大影响。
先删除父再删除子
这会将父项标记为已删除,并强制将子项的外键更新为 null 或键的默认值,具体取决于外键属性是否可为空。此规则的一个异常(exception)是 breeze 永远不会尝试修改主键,因此如果子项的外键也是主键的一部分,breeze 将不会尝试修改它。
所有子导航属性现在将返回空数组或 null,具体取决于导航属性是否为标量。此时,由于外键更改,每个子项都将标记为已修改。
然后每个 child 都将被标记为已删除。
先删子再删父(推荐)
每个 child 都将被标记为已删除。外键不会改变,但相应的导航属性将返回 null,而不是返回父级。此时,先前返回这些子级的所有父级导航属性现在将返回 null 或空数组。 父项被标记为已删除。不会对其任何子项进行任何更改(因为此时它还没有)。
所以在你的情况下,我会尝试先删除子项,然后再删除父项。这样你就不太可能在服务器上保存失败,因为在保存之前没有修改任何 child 。
关于javascript - 级联删除不适用于 Breeze,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26724082/
我是一名优秀的程序员,十分优秀!