229  
查询码:00000157
EF框架主从表一对多,删除主表数据对应的从表数据也自动删除
作者: 孙强 于 2020年08月20日 发布在分类 / 人防组 / 人防后端 下,并于 2020年08月20日 编辑
EF 主从 删除

功能: 删除主表数据,对应的从表数据也自动删除。


1.建立主从表一对多关系,IoT_Host和IoT_Item。


主表: IoT_Host

粘贴图片

子表:IoT_Item

粘贴图片

2.建立外键一对多关系。

粘贴图片

3.添加OnDelete(DeleteBehavior.Cascade),当删除主表数据的同时,子表数据也删除了。还有其他属性可以查看。

粘贴图片


DeleteBehavior.Cascade

  • 如果关联实体未被跟踪,主实体的状态标记为删除,执行SaveChage时,在删除主表的数据的同时,通过数据库的行为删除关联表的数据行;
  • 如果关联实体已经被跟踪,将主实体的状态标记为删除时,关联实体的状态也会标记为删除,执行SaveChange时,先删除关联表的数据行,然后再删除主表的数据行;
  • 外键可以设置非空值、也可以设置为可为空值;
  • 关联实体可以不被跟踪。

DeleteBehavior.SetNull

  • 如果关联实体未被跟踪,主实体的状态标记为删除,执行SaveChage时,在删除主表的数据时,通过数据库的行为将关联表数据行的外键更新为NULL,;
  • 如果关联实体已经被跟踪,将主实体的状态标记为删除时,关联实体的外键会被设置为null,同时将关联实体的状态标记为修改,执行SaveChange时,先更新关联表的数据行 ,然后删除主表的数据行;
  • 因为要将外键更新为NULL,所以外键必须设置为可空字段;
  • 关联实体可以不被跟踪。

DeleteBehavior.ClientSetNull

  • 数据库不会执行任何行为;
  • 关联实体必须被跟踪,将主实体的状态标记为删除时,关联实体的外键被设置为null,同时将关联实体的状态标记为修改,执行SaveChange时,先更新关联表的数据行,然后删除主表的数据行(此时的行为与DeleteBehavior.SetNull一致);
  • 因为要将外键更新为NULL,所以外键必须设置为可空字段;
  • 关联实体必须被跟踪,否则保存数据时会抛出异常。

DeleteBehavior.Restrict

  • 框架不执行任何操作,由开发人员决定关联实体的行为,可以将关联实体的状态设置为删除,也可以将关联实体的外键设置为null;
  • 因为要修改关联实体的状态或外键的值,所以关联实体必须被跟踪。

参考:https://blog.csdn.net/weixin_30729609/article/details/99404765?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param




 推荐知识

 历史版本

修改日期 修改人 备注
2020-08-20 20:50:41[当前版本] 孙强 1.0
2020-08-20 20:49:39 孙强 1.0

 附件

附件类型

PNGPNG

知识分享平台 -V 4.8.7 -wcp