为什么实体不能具有具有一对一强制逆关系的唯一性约束?
有两个实体:
属性:名称
关系:部门(一对一,非可选)
属性:标题(唯一约束)
关系:人(对多,可选)
模型无法在 iOS 9、XCode 7.0.1 中编译,并出现错误配置的实体错误:
实体配置错误:实体部门不能具有唯一性
约束和一对一强制逆关系
人员.部门
Update:问题在 XCode 8.3.1 中仍然相关。
简短回答:
根本问题很可能是由 sqlite 标准引起的。对此我不确定。然而,这很可能是因为 sqlite 的限制。我在互联网上发现了一些帖子,其中人们在一张表上遇到了多个约束的问题,这很可能就是两表解决方法起作用的原因。
长答案:
已经很晚了,但我希望它能有所帮助。
当您的实体具有唯一约束和强制关系时,就会发生这种情况。我猜这是因为iOS 9.0中添加了独特的约束行为。不过,您可以通过两种方式解决这个问题:
您删除唯一约束或使关系可选。您可以在代码中处理可选关系。但这不会是一个好的解决方案。
OR
您可以使用解决方法。你可以两者兼得。您可以创建具有唯一约束的超类。然而,这也不会没有问题。
让我们拥有三个实体。 A、B 和 C。
A 是您的超类,B 是 A 的子类,C 也是 A 的子类。 A 对其属性 PrimaryKey 有唯一约束。保存B和C的实例时,B和C不能具有相同的primaryKey。因为 CoreData 会将两者作为 A 进行管理。
您可以将 A 更改为具有两个属性:
- int:originalPrimaryKey(无唯一约束)
- string:primaryKey(唯一约束)
您现在可以将primaryKeys映射到originalPrimaryKey,并且在设置originalPrimaryKey时,您可以将字符串primaryKey属性设置为CLASS_NAME.{originalPrimaryKey}。这将使您能够实现您所期望的行为。但您必须为 PrimaryKeys 添加解决方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)