级联删除无法使用Breeze
Cascade Delete Not Working with Breeze
我有一个子表,它有引用另外两个表Parent1&Parent2(这些不是这些表的真实名称)。Parent1&Parent2都与祖父母有一对多的关系。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();
}
我收到以下例外情况。
中发生类型为"System.exception"的异常Breeze.ContentProvider.dll,但未在用户代码中处理
附加信息:UPDATE语句与FOREIGN KEY约束"FK_dbo.Child_dbo.Parent1_Parent1Id"数据库"DB"、表"dbo.Parent1"、列"Id"中发生冲突。
语句已终止。
我不知道发生了什么。Breeze是否试图用NULL外键更新Child行?
Breeze不支持级联自动删除。但是,您可以在代码中执行这样的删除。基本上,当您删除父级及其关联的子级时,您有两个选择,执行这些操作的顺序会对流程产生重大影响。
-
删除父项,然后删除子项
这将标记父项为已删除,并将强制更新子项的外键为null或键的默认值,具体取决于外键属性是否可为null。这个规则的一个例外是,微风永远不会试图修改主键,所以如果子项的外键也是主键的一部分,那么微风就不会试图修改它
所有子导航属性现在都将返回空数组或null,具体取决于导航属性是否为标量。此时,由于外键的更改,每个子项都将标记为已修改。
然后,每个子项都将被标记为已删除。
-
删除子项,然后删除父项(推荐)
每个子项都将被标记为已删除。外键不会更改,但相应的导航属性将返回null,而不是返回父级。此时,以前返回这些子对象的父对象的所有导航属性现在都将返回null或空数组。父级被标记为已删除。它的任何子代都没有改变(因为目前它没有)。
所以在你的情况下,我会先删除孩子,然后再删除家长。这样,您就不太可能在服务器上保存失败,因为在保存之前不会修改任何子项。
- 使用php或javascript从facebook相册URL中删除多余的部分
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 如何删除多行HTML排列中的空白
- 如何从rails中的代码中删除新行( )
- 删除对HTML元素的拖动
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 按顺序添加和删除类
- iframe正在添加标签,需要删除它们
- 如何在HTML输入字段中添加不可删除的后缀
- addData()从最新图表中删除.js 2.1.3-怎么了
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 删除CKEditor工具栏按钮,但不删除功能
- 当浏览器上的后退按钮到达主页时,我需要删除Class
- 正在删除node.js中已验证的网站
- 正在从页面中删除iframe
- 如何从 HTML 查询中删除项目
- 如何在iOS应用程序中从Firebase中删除超过6小时的数据
- 未捕获的类型错误:无法读取属性'删除'的未定义
- 级联删除无法使用Breeze
- 从breeze/knockout表中删除会产生"Cannot read property 'Board