如何定义实体身份

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 的标准行为。

【讨论】:

以上是关于如何定义实体身份的主要内容,如果未能解决你的问题,请参考以下文章

区块链与分布式身份

AWS IAM“身份”和“实体”之间的区别

如何在 ASP.NET MVC 5 中实现自定义身份验证

使用 IdentityServer4、Asp.Net Core Identity 和自定义提供程序进行 Blazor WebAssembly 身份验证,无需实体框架

如何将 ASP.NET Core 身份链接到另一个实体?

如何首先在实体框架代码中设置身份主键的起始值?