【问题标题】:Can we use union of two sqlite databases with same tables for Core Data?我们可以为 Core Data 使用两个具有相同表的 sqlite 数据库的联合吗?
【发布时间】:2010-05-25 13:13:41
【问题描述】:

我有一个带有预填充 sqlite“基线”数据库的 iPhone Core Data 应用程序。我可以添加第二个较小的 sqlite 数据库吗都是单一数据源?

我的想法是:

1) “基线”数据库永远不会改变。

2) 我可以在需要时下载较小的“补充”sqlite 数据库以获取更多数据(我假设允许下载 sqlite 数据库,否则请发表评论)。

3) 然后 Core Data 能够合并来自 1 和 2 的数据。然后我可以通过调用我定义的 Core Data 托管对象模型来引用这个统一的数据。

希望这是有道理的。

提前致谢。

【问题讨论】:

    标签: iphone sqlite core-data


    【解决方案1】:

    Core Data 旨在通过– addPersistentStoreWithType:configuration:URL:options:error: 方法处理多个数据文件。这将允许您将所有数据文件组合在一起,然后通过单个 NSManagedObjectContext 访问它们。

    您唯一的问题,甚至可能不是您的问题,是存储文件不能直接相互引用。因此,您将需要通过唯一标识符“手动”引用文件之间的数据。不过我怀疑你已经意识到了这个限制。

    手动关系

    这个想法是,当“关系”中的两个对象都在一个模型和一个文件中时,Core Data 会发挥作用并为您处理所有引用完整性。但是,当它们位于不同的文件和/或模型中时,这不会再自动发生了。

    此问题的解决方案是使用获取的属性来查找某个唯一标识符来检索您希望位于关系另一端的实体(或多个实体)。这会给你一个文件之间的“弱”关系。

    在执行此操作时需要注意的一点。当某些事情发生变化时,获取的属性不会自动更新。这意味着当数据更改会导致该关系发生变化时,您的应用程序不会自动意识到这一点,您需要再次请求该属性以获取更新的关系信息。

    希望这能让它更清楚一点。

    获取的属性和关系共存

    它们绝对可以共存,但要意识到它们是两个独立的属性。如果您希望您的控制器代码将它们视为一个,那么我建议为该实体构建一个子类,然后在其中添加一个便捷方法,该方法同时满足关系和获取的属性,然后将它们汇总到一个 NSArrayNSSet 在将其返回到您的控制器代码之前。

    【讨论】:

    • 哇,这听起来太棒了!让我试试这个。我对 Core Data 了解得越多,我就越意识到它非常酷。顺便说一句 - Marcus,你太棒了,你一直在回答我的一些与核心数据相关的问题,我非常感谢你的帮助和专业知识。
    • 嗨,马库斯 - 您能否扩展“文件之间的参考数据'手动'评论”?我有相互之间有关系的实体,一个挑战(我相信你是在暗示)是 sqlite store1 中的实体 1 的实例与它与 sqlite store2 中的实体 2 的(一个实例)的关系?我如何“手动”管理这个?谢谢
    • 谢谢 - 我明白了,让我阅读获取的属性。获取的属性可以与实体之间的关系共存吗?例如,1) 在我的基线数据库上,Core Data 的神奇之处在于该商店中两个对象之间的关系。 2)对于跨两个不同商店的对象的数据/实例,如果我理解正确,我需要使用获取的属性,而不是使用它们的关系。 1) 和 2) 可以共存吗?
    【解决方案2】:

    您可以使用ATTACH DATABASE 语句附加下载的数据库并使用表的联合进行操作。

    【讨论】:

    • 这个问题是关于核心数据的;不是原始的 SQLite。
    • @Marcus S. Zarra:感谢您的评论。那就别介意我的回答=)
    猜你喜欢
    • 2016-08-20
    • 1970-01-01
    • 2012-07-10
    • 2019-10-21
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多