当前位置: 首页 > news >正文

iOS开发CoreData的多表关联

1、多表关联

  多表关联,对SQL 数据库的操作,在一张表的数据中可以引用另外一张表里的数据。通过 Entity 实体中的 Relationships 来实现,比起传统的 SQL 数据库来,更加简单。

 

2、如何关联

  本例中有三个实体Classes(班级)、Course(课表)、Student(学生),也就是三张表。

  Student学生只会在一个班级,多张课表两种关联属性;对应的Classes班级只会有多少个学生一种对应关系;Course课表也和多少个学生一种对应关系。

  以Student这个实体为例:studentCourses学生课表关联属性、studentClass学生班级关联属性。

  1)Relationship:关联属性名

  2) Destnation:关联属性的所属类

  3)Inverse:所属类的关联属性

  4)Delete Rule:删除规则

    No Action:表示删除学生时,班级和课表不做任何处理(认为学生还在,会造成异常,不建议使用)

    Nullify:表示删除学生时,班级和课表也会删除对应学生

    Cascade:表示删除学生时,班级和课表也会全部删除(级联操作,如果班级和课表也有级联操作,相关表都会删除)

    Deny:表示删除学生时,班级和课表会拒绝,只有班级和课表为nil时,才会删除学生

  5)Type:To One 和 To Many 两种选择,一个学生只会在一个班级所有选择To One,而课表一对多选择To Many

  另外两个实体的关联图:

  注意:在没有创建Course和Classes的关联属性时,Student的关联关系中Inverse没有选项的;

       如果在创建Course和Classes的关联属性之前创建了Student的关联属性,选择Course和Classes的Inverse之后,Student的Inverse会自动填充。

 

3、生成实体类

  以Student为例,选择To Many时生成的是NSSet集合!

#import "Student+CoreDataClass.h"


NS_ASSUME_NONNULL_BEGIN

@interface Student (CoreDataProperties)

+ (NSFetchRequest<Student *> *)fetchRequest;

@property (nullable, nonatomic, copy) NSString *age;
@property (nullable, nonatomic, copy) NSString *name;
@property (nullable, nonatomic, retain) Classes *studentClass;
@property (nullable, nonatomic, retain) NSSet<Course *> *studentCourses;

@end

@interface Student (CoreDataGeneratedAccessors)

- (void)addStudentCoursesObject:(Course *)value;
- (void)removeStudentCoursesObject:(Course *)value;
- (void)addStudentCourses:(NSSet<Course *> *)values;
- (void)removeStudentCourses:(NSSet<Course *> *)values;

@end

NS_ASSUME_NONNULL_END

 

4、简单使用

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"===%@",NSHomeDirectory());

    // Do any additional setup after loading the view, typically from a nib.
    self.delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    
    [self addData];
}
//添加一条数据
- (void)addData{
    Student *newEintity = [NSEntityDescription insertNewObjectForEntityForName:Model_Name inManagedObjectContext:self.delegate.persistentContainer.viewContext];
    newEintity.name = @"张三";
    newEintity.age = @"13";
    Classes *newClass = [[Classes alloc] initWithContext:self.delegate.persistentContainer.viewContext];
//    newClass.class_id = @"13";
//    newClass.class_name = @"高二";
    newEintity.studentClass = newClass;
    
    Course *newCourse = [[Course alloc] initWithContext:self.delegate.persistentContainer.viewContext];
//    newCourse.courseId = 1;
//    newCourse.courseName =@"语文";
//    newCourse.chapterCount = 23;
    [newEintity addStudentCourses:[NSSet setWithObject:newCourse]];
    [self.delegate.persistentContainer.viewContext save:nil];
}

 

转载于:https://www.cnblogs.com/xianfeng-zhang/p/8301834.html

相关文章:

  • [xsy2369]取名字
  • c3p0和druid性能测试过程中sybase卡死的问题解决过程记录
  • Alamofire上传文件
  • django第一个app,3
  • 坦克大战1.0版
  • 【Html5】-- 塔台管制
  • 国内域名国内服务器,不备案解决80端口不开放方法
  • python
  • Java与Unix时间戳的相互转换
  • Intellij Idea编译项目下的.java文件时的编码问题
  • Windows上SSH服务器的配置以及客户端的连接
  • UIScrollView中使用AutoLayout
  • mysql LINESTRING ,POINT 类型操作
  • 读Git Pro2的笔记
  • Vue.js简介及指令
  • 〔开发系列〕一次关于小程序开发的深度总结
  • C++类中的特殊成员函数
  • Github访问慢解决办法
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • JS专题之继承
  • learning koa2.x
  • Mocha测试初探
  • PHP变量
  • Shell编程
  • Spring Boot MyBatis配置多种数据库
  • Vue ES6 Jade Scss Webpack Gulp
  • Webpack 4x 之路 ( 四 )
  • 搞机器学习要哪些技能
  • 码农张的Bug人生 - 见面之礼
  • 什么是Javascript函数节流?
  • 我的业余项目总结
  • 新书推荐|Windows黑客编程技术详解
  • 【干货分享】dos命令大全
  • 阿里云ACE认证学习知识点梳理
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (26)4.7 字符函数和字符串函数
  • (6)添加vue-cookie
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (循环依赖问题)学习spring的第九天
  • (一)基于IDEA的JAVA基础12
  • .net6+aspose.words导出word并转pdf
  • .Net的DataSet直接与SQL2005交互
  • .NET正则基础之——正则委托
  • @property @synthesize @dynamic 及相关属性作用探究
  • [145] 二叉树的后序遍历 js
  • [C#]C# winform实现imagecaption图像生成描述图文描述生成
  • [C语言][PTA基础C基础题目集] strtok 函数的理解与应用
  • [echarts] y轴不显示0
  • [EFI]Acer Aspire A515-54g电脑 Hackintosh 黑苹果efi引导文件
  • [hdu2196]Computer树的直径
  • [HNOI2018]排列
  • [linux c]linux do_div() 函数用法