核心数据关系验证错误处理



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

如下 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中删除它,即使拒绝规则会因为插入新的子实体而停止。您应该做的是删除插入的实体,然后删除父实体。否则,您应该重新研究应用程序的体系结构。

相关内容

  • 没有找到相关文章

最新更新