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

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.lryc.cn/news/469342.html

相关文章:

  • springboot童装销售管理系统-计算机毕业设计源码92685
  • OpenCV中的图像通道合并
  • Flutter TextField和Button组件开发登录页面案例
  • 【vue + mockjs】Mockjs——数据接口模拟
  • ssm订餐系统-计算机毕业设计源码26763
  • 4.2-7 运行MR应用:词频统计
  • 查看Chrome安装路
  • 深入剖析Canvas的getBoundingClientRect:精准定位与交互事件实现
  • SQL SERVER 2005/2008/2012/2016/2020 数据库状态为“可疑”的解决方法(亲测可用)
  • Linux: network: wireshark IO图的一个问题
  • TMGM平台可靠么?交易是否安全?
  • 软工毕设开题建议
  • Python自动化发票处理:使用Pytesseract和Pandas从图像中提取信息并保存到Excel
  • 新手直播方案
  • 【大模型理论篇】主流大模型的分词器选择及讨论(BPE/BBPE/WordPiece/Unigram)
  • 入侵检测算法平台部署LiteAIServer视频智能分析平台行人入侵检测算法
  • 000010 - Mapreduce框架原理
  • OpenCV未定义标识符CV_XXX
  • flask服务通过gunicorn启动
  • 用更多的钱买电脑而不是手机
  • 10.25学习
  • 用xshell给服务器上传jar包
  • 从零搭建开源陪诊系统:关键技术栈与架构设计
  • java List<Map<String, Object>> 转 List<JSONObject> 的几种方式
  • 使用Python来下一场深夜雪
  • uniapp使用easyinput文本框显示输入的字数和限制的字数
  • 蓝牙技术的多种模式详解
  • 攻防世界-流量分析WP
  • 打印爱心型
  • WASM 使用说明23事(RUST实现)