我在两个核心数据实体之间有一对多的关系。
如下 A->>B
A->> B :删除拒绝(即在有 B 的对象时拒绝删除 A(
B -> A : 作废
在多个上下文中,一个上下文不知道其他更改,因此在这种情况下,我在保存父上下文时收到验证错误,因为在一个上下文中,子项入到在另一个上下文中删除的父上下文中。
他们几乎没有提供有关如何处理验证错误的信息,大多数示例只是向用户显示错误并放弃更改。如果我需要撤消对该特定父对象的删除,我可以吗?
有什么选择可以如何处理验证错误。NSValidationRelationsDeniedDeleteError
我没有找到一种方法来撤消仅对某个对象的删除而不会丢失更改。因此,如果您删除了childContext
中的父实体,然后保存了childContext
,则删除的实体会自动添加到parentContext.deletedObjects
。我尝试了不同的方法,但我能够从parentContext
取消删除操作的唯一方法是调用parentContext.refreshObject(deletedParent, mergeChanges: false)
。(当然,您可以尝试回滚或重置上下文(
这真的取决于你要做什么(所以业务在这里有很大的影响力!但我认为你应该乐观地工作:https://en.wikipedia.org/wiki/Optimistic_concurrency_control有时,如果发生冲突,可以回滚并重新启动事务。
通常,childContext
会覆盖parentContext
的更改(子项具有更高的优先级(。因此,应用的体系结构应以相同的方式工作。在childContext
中删除实体时,也应该在parentContext
中删除它,即使拒绝规则会因为插入新的子实体而停止。您应该做的是删除插入的实体,然后删除父实体。否则,您应该重新研究应用程序的体系结构。