如何定义实体身份
Posted
技术标签:
【中文标题】如何定义实体身份【英文标题】:How to define entity identity 【发布时间】:2015-02-20 10:57:17 【问题描述】:有没有办法定义实体的哪些属性应该定义其对象的NSManagedObjectID
?
我希望能够直接使用-[NSManagedObjects isEqual:]
以及同样允许的NSSet
功能,而不是构建额外的字典和循环来按属性值进行比较。
换一种说法:如果一个实体有一个在逻辑上会作为其主键的属性,那么如何告诉 CoreData 将其用于对象相等性测试?
【问题讨论】:
理想情况下我不想继承NSManagedObject
。
【参考方案1】:
你没有。无论如何,子类化也无济于事。
Core Data 不关心您是否创建重复记录。就它而言,如果两个托管对象在持久存储中表示相同的底层实例,则它们是相等的。它在托管对象之间没有其他“相等”的概念。
子类化没有帮助,因为正如 NSManagedObject
的文档所解释的那样:
NSManagedObject
本身自定义了NSObject
的许多功能,以便可以将托管对象正确集成到Core Data 基础架构中。 Core Data 依赖于NSManagedObject
对以下方法的实现,因此您绝对不能覆盖这些方法:[...]isEqual:
,
您可以创建自己的方法来比较托管对象的任何方式,但任何依赖于 isEqual:
的行为都将获得 Core Data 的标准行为。
【讨论】:
以上是关于如何定义实体身份的主要内容,如果未能解决你的问题,请参考以下文章
使用 IdentityServer4、Asp.Net Core Identity 和自定义提供程序进行 Blazor WebAssembly 身份验证,无需实体框架