双向导航和单向导航
目录
双向导航
单向导航
迁移数据库异常
解决办法
1.导航属性改为空
2.使用 `ON DELETE NO ACTION` 或 `ON UPDATE NO ACTION`
选择
双向导航
一对多:一个Article有多个Comment

class Article
{public long Id { get; set; }public string Title { get; set; }public string Content { get; set; }public List<Comment> Comments { get; set; } = new List<Comment>();
}class Comment
{public long Id { get; set; }public string Message { get; set; }public Article Article { get; set; }
}
系统里的一些基础表,经常被非常多的表引用,例如下图,User被5个表引用,双向导航的话,User要添加5个属性,而单向引用的话就不需要在User表进行操作,只需在请假表中找到User即可。

单向导航
与双向导航配置类似,在配置的时候WithMany()不设置参数即可。

class User
{public int Id { get; set; }public string Name { get; set; }
}class Leave
{public long Id { get; set; }public User Requester { get; set; }public User Approver { get; set; }public string Remarks { get; set; }
}class LeaveConfig : IEntityTypeConfiguration<Leave>
{public void Configure(EntityTypeBuilder<Leave> builder){builder.ToTable("T_Leave");builder.HasOne<User>(a => a.Requester).WithMany().IsRequired();builder.HasOne<User>(a => a.Approver).WithMany();}
}class UserConfig : IEntityTypeConfiguration<User>
{public void Configure(EntityTypeBuilder<User> builder){builder.ToTable("T_User");}
}
迁移数据库异常
随后进行数据库迁移,在.net5中能够正常迁移,但是.net6会报异常
Microsoft.Data.SqlClient.SqlException (0x80131904): 将 FOREIGN KEY 约束 'FK_T_Leave_T_User_RequesterId' 引入表 'T_Leave' 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
在Leave类中,由于有两个User属性,系统提示可能会导致循环或多重级联路径。
解决办法
1.导航属性改为空
关系导航 - EF Core | Microsoft Learn
导航有两种形式:引用和集合。 引用导航是对另一个实体的简单对象引用。 它们表示一对多和一对一关系中的“一”方。使用 C# 可为空引用类型时,对于可选关系,引用导航必须为空
class Leave
{public long Id { get; set; }public User? Requester { get; set; }public User? Approver { get; set; }public string Remarks { get; set; }
}
2.使用 `ON DELETE NO ACTION` 或 `ON UPDATE NO ACTION`
可以指定在删除或更新操作时不执行任何动作。这样可以避免级联操作导致的循环问题。
实体出现两个或以上user属性从第二个开始的属性配置加上 .OnDelete(DeleteBehavior.NoAction)
class LeaveConfig : IEntityTypeConfiguration<Leave>
{public void Configure(EntityTypeBuilder<Leave> builder){builder.ToTable("T_Leave");builder.HasOne<User>(a => a.Requester).WithMany().IsRequired();builder.HasOne<User>(a => a.Approver).WithMany().OnDelete(DeleteBehavior.NoAction);}
}
选择
对于主从结构的“一对多”表关系,一般是声明双向导航属性。
而对于其他的“一对多”表关系:如果表属于被很多表引用的基础表,则用单项导航属性,否则可以自由决定是否用双向导航属性。
相关文章:
双向导航和单向导航
目录 双向导航 单向导航 迁移数据库异常 解决办法 1.导航属性改为空 2.使用 ON DELETE NO ACTION 或 ON UPDATE NO ACTION 选择 双向导航 一对多:一个Article有多个Comment class Article {public long Id { get; set; }public string Title { get; set; }pu…...
Unity3d 基于Barracuda推理库和YOLO算法实现对象检测功能
前言 近年来,随着AI技术的发展,在游戏引擎中实现和运行机器学习模型的需求也逐渐显现。Unity3d引擎官方推出深度学习推理框架–Barracuda ,旨在帮助开发者在Unity3d中轻松地实现和运行机器学习模型,它的主要功能是支持在 Unity 中…...
Lambda离线实时分治架构深度解析与实战
一、引言 在大数据技术日新月异的今天,Lambda架构作为一种经典的数据处理模型,在应对大规模数据应用方面展现出了强大的能力。它整合了离线批处理和实时流处理,为需要同时处理批量和实时数据的应用场景提供了成熟的解决方案。本文将对Lambda…...
Spring Boot教程之五十一:Spring Boot – CrudRepository 示例
Spring Boot – CrudRepository 示例 Spring Boot 建立在 Spring 之上,包含 Spring 的所有功能。由于其快速的生产就绪环境,使开发人员能够直接专注于逻辑,而不必费力配置和设置,因此如今它正成为开发人员的最爱。Spring Boot 是…...
jenkins入门6 --拉取代码
Jenkins代码拉取 需要的插件,缺少的安装下 新建一个item,选择freestyle project 源码管理配置如下:需要添加git库地址,和登录git的用户密码 配置好后执行编译,成功后拉取的代码在工作空间里...
CAPL概述与环境搭建
CAPL概述与环境搭建 目录 CAPL概述与环境搭建1. CAPL简介与应用领域1.1 CAPL简介1.2 CAPL的应用领域 2. CANoe/CANalyzer 安装与配置2.1 CANoe/CANalyzer 简介2.2 安装CANoe/CANalyzer2.2.1 系统要求2.2.2 安装步骤 2.3 配置CANoe/CANalyzer2.3.1 配置CAN通道2.3.2 配置CAPL节点…...
Virgo:增强慢思考推理能力的多模态大语言模型
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
偃动访无穿戴动作捕捉系统:赋能多行业开启动作捕捉新篇章
在当今科技飞速发展的时代,动作捕捉技术正以前所未有的态势深入到社会发展的各个领域,成为众多行业不可或缺的重要助力。从早期的惯性动捕与光捕技术,到如今更为先进的无标记动捕技术,动作捕捉领域不断迎来革新与突破。 无标记动…...
mikro-orm 和typeorm 对比
以下是Mikro-ORM和TypeORM的详细对比: 设计理念与架构 Mikro-ORM:基于数据映射器、工作单元和身份映射模式。这种设计使得它在管理内存中实体状态方面表现优异,能够自动处理事务,当调用em.flush()时,所有计算出的更改…...
Docker入门之docker基本命令
Docker入门之docker基本命令 官方网站:https://www.docker.com/ 1. 拉取官方镜像并创建容器(以redis为例) 拉取官方镜像 docker pull redis# 如果不需要添加到自定义网络使用这个命令,如需要,直接看第二步 docker r…...
mysql的一些函数及其用法
mysql 1-来自于leetcode1517的题目 表: Users------------------------ | Column Name | Type | ------------------------ | user_id | int | | name | varchar | | mail | varchar | ------------------------已知一个表,它的…...
NO.3 《机器学习期末复习篇》以题(问答题)促习(人学习),满满干huo,大胆学大胆补!
目录 🔍 1. 对于非齐次线性模型 ,试将其表示为齐次线性模型形式。 编辑 🔍 2. 某汽车公司一年内各月份的广告投入与月销量数据如表3-28所示,试根据表中数据构造线性回归模型,并使用该模型预测月广告投入为20万元时…...
黑马跟学.苍穹外卖.Day03
黑马跟学.苍穹外卖.Day03 苍穹外卖-day03课程内容1. 公共字段自动填充1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3 步骤三 1.4 功能测试1.5 代码提交 2. 新增菜品2.1 需求分析与设计2.1.1 产品原型2.1.2 接口设计2.1.3 表设计 2.2 代码开发2.2.1 文件上…...
js -音频变音(听不出说话的人是谁)
学习参考来源: https://zhuanlan.zhihu.com/p/634848804 https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Audio_API 实际效果: http://www.qingkong.zone/laboratory?typeaudio-confusion 前言 本文内容可结合上面学习参考来源,结合…...
鸿蒙UI(ArkUI-方舟UI框架)
参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-layout-development-overview-V13 ArkUI简介 ArkUI(方舟UI框架)为应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能ÿ…...
常见的http状态码 + ResponseEntity
常见的http状态码 ResponseStatus(HttpStatus.CREATED) 是 Spring Framework 中的注解,用于指定 HTTP 响应状态码。 1. 基本说明 HttpStatus.CREATED 对应 HTTP 状态码 201表示请求成功且创建了新的资源通常用于 POST 请求的处理方法上 2. 使用场景和示例 基本…...
pikachu - Cross-Site Scripting(XSS)
pikachu - Cross-Site Scripting(XSS) 声明! 笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人无关,切勿触碰法律底线,否则后果自负&#x…...
操作系统之文件系统的基本概念
目录 用户和磁盘视角的文件 文件控制块(FCB)和索引结点(inode) 文件的操作 创建文件(create系统调用) 写文件(write系统调用) 读文件(read系统调用) 重…...
深入探讨 Android 中的 AlarmManager:定时任务调度及优化实践
引言 在 Android 开发中,AlarmManager 是一个非常重要的系统服务,用于设置定时任务或者周期性任务。无论是设置一个闹钟,还是定时进行数据同步,AlarmManager 都是不可或缺的工具之一。然而,随着 Android 系统的不断演…...
西电-算法分析-研究生课程复习笔记
24年秋的应该是张老师最后一次用卷面考试,他说以后这节课的期末考试都是在OJ上刷题了张老师上课还挺有意思的,上完之后能学会独立地思考算法设计问题了。整节课都在强调规模压缩这个概念,考试也是考个人对这些的理解,还挺好玩的哈…...
新手入门:利用快马平台快速理解与模拟openclaw重启命令执行
今天想和大家分享一个特别适合机器人编程新手的实践项目——如何在安全可控的环境下理解和模拟openclaw机械爪的重启命令。这个过程中我发现了InsCode(快马)平台这个神器,它让整个学习过程变得异常简单。 为什么需要专门学习重启命令? 机械爪作为机器人常…...
英雄联盟录像编辑终极指南:免费开源工具League Director完全教程
英雄联盟录像编辑终极指南:免费开源工具League Director完全教程 【免费下载链接】leaguedirector League Director is a tool for staging and recording videos from League of Legends replays 项目地址: https://gitcode.com/gh_mirrors/le/leaguedirector …...
从自由度到旋转矩阵:机器人学中刚体运动的数学基石
1. 刚体运动的基础:自由度概念解析 刚体运动描述是机器人学中最基础的数学工具,就像学英语要先掌握26个字母一样。我第一次接触这个概念时,被各种专业术语搞得晕头转向,直到把机械臂末端执行器想象成自己手中的螺丝刀才豁然开朗。…...
RobotFramework自动化测试实战:从关键字设计到复杂循环处理
RobotFramework自动化测试实战:从关键字设计到复杂循环处理 在软件测试领域,自动化测试已经成为提升效率、保证质量的必备手段。而RobotFramework作为一款基于Python的开源自动化测试框架,凭借其关键字驱动的设计理念和高度可扩展性…...
Pixel Language Portal效果实测:Hunyuan-MT-7B在游戏对话文本中的语气保留与文化适配能力
Pixel Language Portal效果实测:Hunyuan-MT-7B在游戏对话文本中的语气保留与文化适配能力 1. 引言:当翻译遇见像素冒险 在游戏本地化领域,传统翻译工具往往难以捕捉角色对话中的独特语气和文化内涵。Pixel Language Portal(像素…...
破解3DS游戏格式兼容难题:3dsconv工具的技术实现与应用指南
破解3DS游戏格式兼容难题:3dsconv工具的技术实现与应用指南 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv 问题…...
Linux内核中的进程调度高级话题
Linux内核中的进程调度高级话题 引言 进程调度是Linux内核中负责分配CPU时间的核心子系统,它决定了系统中各个进程的执行顺序和时间分配。随着系统复杂性的增加和硬件技术的发展,进程调度面临着越来越多的挑战。本文将深入探讨Linux内核中进程调度的高级…...
老游戏兼容性终极解决方案:让经典游戏在现代Windows系统重生
老游戏兼容性终极解决方案:让经典游戏在现代Windows系统重生 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/…...
MOCo. x 姆明快闪店美陈设计为何刷屏出圈?肆墨设计
在商业空间同质化加剧的当下,快闪店已成为品牌破圈、链接消费者的核心载体。MO&Co. 携手经典 IP 姆明打造的「姆明划水俱乐部」全国首展,以成熟的美陈设计逻辑,实现了品牌调性、IP 情感与商业转化的三重统一,为 IP 联名快闪美…...
告别手动造数据!用JMeter JSR223预处理程序+Groovy脚本,5分钟搞定接口签名和AES加密
告别手动造数据!用JMeter JSR223预处理程序Groovy脚本,5分钟搞定接口签名和AES加密 性能测试工程师最头疼的莫过于每次执行测试前,都要手动计算接口签名、拼接参数、加密敏感数据。这种重复性工作不仅耗时耗力,还容易出错。想象一…...
