在运行时动态创建 Core Data 实体
Posted
技术标签:
【中文标题】在运行时动态创建 Core Data 实体【英文标题】:Create Core Data entities dynamically during runtime 【发布时间】:2015-04-28 00:50:35 【问题描述】:我需要能够在运行时创建新的核心数据实体。我已经编写了以编程方式创建对象的代码,但是,由于模型是不可变的,因此我无法在运行时添加实体。
我的问题和这个帖子类似,但是没有满意的答案:How to dyanmic create a new entity (table) via CoreData model?
有关更改核心数据模型的文档说明:
托管对象模型在被对象使用之前是可编辑的 图管理器(托管对象上下文或持久存储 coordinator)。 这允许您动态创建或修改它们。 但是,一旦使用模型,就不能更改它。这是 在运行时强制执行——当对象管理器第一次使用 模型,整个模型变得不可编辑。任何试图 在该点之后改变模型或其任何子对象会导致 要抛出的异常。 如果您需要修改正在使用的模型, 创建副本,修改副本,然后丢弃对象 旧型号。
但是,我不清楚这到底是什么意思——一旦使用了持久存储协调器,就无法更改整个核心数据模型,或者无法更改单个实体的属性/等.
明确地说,我不想更改当前实体的属性,我只想添加新实体。不得不使用迁移来添加新实体对我来说似乎很奇怪。
有什么想法吗?
谢谢!
【问题讨论】:
【参考方案1】:文档很清楚。
-
复制模型。
将更改应用到新副本。
销毁旧的 MOC、Persistent Store Coordinator 以及由此创建的所有对象。
如有必要,请应用迁移。
使用更新后的模型创建新的核心数据堆栈(MOC、PSC 等)。
迁移可能是一个症结所在,但它应该是可行的。
【讨论】:
以上是关于在运行时动态创建 Core Data 实体的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Data JPA 中,如何在运行时添加实体?
asp.net core, Ef core : 在运行时动态映射存储库和服务
Entity Framework Core 中的动态数据模型