在创建新实体之前检查现有实体

Posted

技术标签:

【中文标题】在创建新实体之前检查现有实体【英文标题】:Checking for existing entity before creating a new one 【发布时间】:2011-10-28 01:15:06 【问题描述】:

如何在创建具有相同属性的新实体之前检查实体是否已存在?还是 CoreData 已经足够聪明,不会创建实体?

例如,我有一个实体 Employee,其属性为 name 和 id。现在用户通过对话屏幕创建了一个新员工,但是这个员工已经退出,基于 id(可能有同名的员工)。我想可以创建一个获取请求,但是我该把代码放在哪里,我需要为 Employee 创建一个类来执行此操作吗?

编辑:在发布我的问题后,我找到了这个页面:http://www.macresearch.org/cocoa-scientists-part-xxiii-itunes-ifying-core-data-app 这是一种方法吗?好像如果我有更多实体,我会复制很多代码。

【问题讨论】:

【参考方案1】:

Core Data 将允许您创建除了 objectID 之外其他所有内容都相同的托管对象。

最简单的解决方案是禁止重复的员工姓名。当用户输入新员工时,他们将通过键盘或鼠标触发事件。在此事件的操作方法中,您将首先通过检查用户输入的名称是否与现有名称匹配来验证用户的输入。您引用的链接提供了一个您可以使用的获取请求的示例,尽管您可能想研究如何仅获取匹配对象的计数,这将更有效。如果匹配,您会显示警报。

如果您真的希望允许重复名称,您可以依靠 CoreData 分配的 objectID 来区分条目。但是用户不会知道该 ID 是什么。因此,您仍然需要检查姓名匹配并显示一个确认对话框,询问用户是否真的打算创建一个具有相同姓名的单独员工条目。

【讨论】:

谢谢 - 我会继续执行该链接中的代码,并会研究您的建议。也许我会把它放在一个类别中,这样我就可以将它用于我的所有实体。

以上是关于在创建新实体之前检查现有实体的主要内容,如果未能解决你的问题,请参考以下文章

为现有实体创建新的 CoreData 属性时 Swift 崩溃

将表上的现有条目转换为Hibernate实体对象

CoreData 迁移和数据映射:从现有属性创建新实体

Symfony2 - 向现有实体添加新字段

使用 MagicalRecord 使用当前实体创建新实体

实体框架代码优先现有数据库和新数据库维护