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

ASP.NET Core8.0学习笔记(二十三)——EF Core自引用

一、什么是自引用

1.在常见的树状目录中,其结构如下:
在这里插入图片描述

每一个菜单可能有父级菜单,也可能有子菜单。但是无论是哪一级菜单,他们都是同属于菜单对象。将这个菜单对象使用代码进行描述:
在这里插入图片描述

在上面的代码中,主体实体是Menus,但是其依赖实体依旧还是Menus,且导航属性Menus与List<Menus>均指向自己,也就是“自己引用自己”,在数据库中形成了“自连接”关系。此之谓“自引用”。

二、自引用代码环境搭建

1.在EF Core中对这个实体的关系进行详细配置,即一个节点只能指向一个父节点,但是可以含有若干个子节点。注意Parent在这里可以为空。其配置类如下:
在这里插入图片描述

将实体类型显式的标记出来:
在这里插入图片描述

配置DbContext:
在这里插入图片描述

然后直接执行Add-Migration,生成对应的Migration文件。紧接着执行Update-database会报如下错误(EF Core 6.0+,本例是EF Core 8.0):
在这里插入图片描述

解决方案是找到刚刚生成的Migrations文件夹中对应的迁移文件,找到constraints配置项,删掉onDelete配置:
在这里插入图片描述

然后保存并编译代码,重新执行Update-database:
在这里插入图片描述

迁移成功。打开数据库查看外键属性:可以看到这个外键由Menus指向Menus,即自引用。
在这里插入图片描述

三、测试自引用关系

1.新增菜单实体:
在这里插入图片描述

若没有将外键Menus Parent声明为可空:
在这里插入图片描述

执行:
在这里插入图片描述

解决方案:将外键Menus声明为可空即可避免:
运行:
在这里插入图片描述
数据库:
在这里插入图片描述
2.递归打印子节点
在这里插入图片描述

运行:
在这里插入图片描述


http://www.kler.cn/news/367756.html

相关文章:

  • MySQL 数据出海之数据同步方案
  • BitNet: Scaling 1-bit Transformers for Large Language Models
  • Linux复习-C++
  • Spreadsheet导出excel
  • 代码随想录算法训练营第46期
  • android——渐变色
  • 快速搭建 Spring Boot 3 + Prometheus + Grafana 实现实时监控
  • Z-BlogPHP显示错误Undefined array key 0 (set_error_handler)的解决办法
  • 【Chapter 2】因果推断中的随机实验与统计学复习
  • 基于flask+vue框架的的法律咨询信息系统的设计与实现5m1le(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 隨筆 Kafka 拦截器概述
  • 如何选择适合的有序集合数据结构?
  • 瑞吉外卖之com.fasterxml.jackson.dataformat.cbor.CBORFactor相关报错
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21
  • 基于Kratos+ent+postgreSQL构建简单的CRUDapi
  • 嵌入式软开项目——电子手环开发——学习引导和资料网址
  • 基于R语言机器学习遥感数据处理与模型空间预测技术及实际项目案例分析
  • linux运维100讲练习:第7集
  • 【~/.bashrc】linux系统添加环境变量
  • Linux练习_2账户管理
  • IPV6扩展头部
  • Verilog:参数(parameter)的使用
  • 嵌入式——STM32外设应用
  • 抖音列表页采集-爬虫部分(2)
  • B/S架构的诊所药店云his管理系统源码,云门诊管理系统,自主知识产权,支持二次开发
  • iOS Swift逆向——deMangle过程中的偏移计算