iPhone:如何通过外键管理核心数据关系

如何解决iPhone:如何通过外键管理核心数据关系

| 我有一个可以在服务器端和iOS客户端上使用数据库的应用程序。我使用HTTP服务在服务器端的SQL Server和iPhone的Core Data之间进行同步。 我有一些像这样的核心数据对象:
ProductGroup
Attributes:
id
Relationships:
products

Product
Attributes:
id
productGroupId
Releationships:
productGroup
由于服务器的限制,我无法使用增量同步。同步数据时(例如),我必须删除所有ProductGroup对象,从服务器获取响应,然后创建新对象(再创建一些旧对象)。 问题是,如果我有一个属于
productGroupB
productA
,通常我可以做
productA.productGroup
,但是删除
productGroupB
并创建另一个具有相同内容的后,关系就消失了。 所以我在徘徊,有没有办法通过FK管理关系,例如.NET中的Entity Framework,因此在重新创建之后,我仍然可以在关系的另一端找到对象。     

解决方法

        删除
ProductGroup
对象时,您会失去关系,因为Core Data不是SQL。对于关系,Core Data不在乎关系另一侧的对象属性,它仅针对特定对象。您可以具有属性完全相同但关系不同的任意数量的对象,并且这些对象将完全不同。核心数据关系不是SQL连接或键,而是对特定托管对象的持久指针式引用。删除对象,指针也必须走。 要完成所需的操作,可以使用fetched属性,该属性将动态获取
Product.id
属性。但是,这是一种相当笨拙的处理方式。在这种情况下,您不必诉诸于获取的属性。 我认为您需要重新考虑您的设计。我从未见过要删除实体/类的每个实例以添加或删除对象的情况。实际上,您不能一口气做到这一点。取而代之的是,您必须先获取对象,然后将其一一删除。您可能已经很好地检查了每个对象,以便在使用时是否需要删除或更新它。 听起来您从服务器接收到大量的SQL格式数据,并且您认为必须从头开始构建对象图。您真的不需要。无论如何,您都必须解析数据以创建新的“ 5”对象,因此您应使用该解析的结果来更改现有的“ 5”对象。 用伪代码看起来像:
Add a \"synced\" flag to ProductGroup entity in the data model

Set \"synced\" of every ProductGroup object to \"false\"
Extract data for a ProductGroup from server glob
Using data fetch for an existing ProductGroup object
If extracted data matches and existing ProductGroup object
  update existing ProductGroup object
  set synced of ProductGroup object to true
else
  create new ProductGroup object with data
  set synced of new ProductGroup object to true
Delete all ProductGroup objects where synced == false
这里要记住的重要一点是,您正在处理对象,而不是表,列,行或联接。 SQL技术人员经常认为Core Data只是SQL的对象包装。它不是。它是一个对象图管理器,它可能会或可能不会在后台使用SQL将对象图持久化(冻结干燥)到磁盘上。 您必须始终考虑对象。您为使用SQL开发的直觉比帮助您使用Core Data更容易误入歧途。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res