1

我在两个核心数据实体之间有一对多的关系。

如下 A->>B

A ->> B : Delete Deny (即当它们是 B 的对象时拒绝删除 A)

B -> A : 无效

在多个上下文中,一个上下文不知道其他更改,因此在这种情况下,我在保存父上下文时遇到验证错误,因为在一个上下文中,一个子级被插入到一个父级中,而该父级在另一个上下文中被删除。

他们几乎没有提供有关如何处理验证错误的信息,大多数示例只是向用户显示错误并丢弃更改。如果我需要撤消删除该特定父对象,我可以吗?

有什么选择我可以处理验证错误。NSValidationRelationshipDeniedDeleteError

4

1 回答 1

0

我没有找到一种方法来撤消仅对某个对象的删除而不会丢失更改。所以如果你删除了a中的一个父Entity childContext,然后保存了childContext,被删除的实体会自动添加到parentContext.deletedObjects。我尝试了不同的方法,但我能够从中取消删除操作的唯一方法parentContext是调用parentContext.refreshObject(deletedParent, mergeChanges: false). (确保您可以尝试回滚或重置上下文)

这真的取决于你要做什么(所以这里的业务影响很大!)。但我认为你应该乐观地工作:https ://en.wikipedia.org/wiki/Optimistic_concurrency_control 有时,如果发生冲突,可以回滚并重新启动事务。

通常,childContext覆盖parentContext(孩子有更高的优先级)的变化。所以你的应用程序的架构应该以同样的方式工作。当您在 中删除一个实体时childContext,您也应该在 中删除它parentContext,即使拒绝规则阻止您,因为您插入了一个新的子实体。你应该做的是你应该删除插入的实体,然后删除父实体。否则,您应该重新研究应用程序的架构。

于 2016-11-14T17:50:45.443 回答