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

双向导航和单向导航

目录

双向导航

单向导航

 迁移数据库异常

解决办法

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 选择 双向导航 一对多&#xff1a;一个Article有多个Comment class Article {public long Id { get; set; }public string Title { get; set; }pu…...

Unity3d 基于Barracuda推理库和YOLO算法实现对象检测功能

前言 近年来&#xff0c;随着AI技术的发展&#xff0c;在游戏引擎中实现和运行机器学习模型的需求也逐渐显现。Unity3d引擎官方推出深度学习推理框架–Barracuda &#xff0c;旨在帮助开发者在Unity3d中轻松地实现和运行机器学习模型&#xff0c;它的主要功能是支持在 Unity 中…...

Lambda离线实时分治架构深度解析与实战

一、引言 在大数据技术日新月异的今天&#xff0c;Lambda架构作为一种经典的数据处理模型&#xff0c;在应对大规模数据应用方面展现出了强大的能力。它整合了离线批处理和实时流处理&#xff0c;为需要同时处理批量和实时数据的应用场景提供了成熟的解决方案。本文将对Lambda…...

Spring Boot教程之五十一:Spring Boot – CrudRepository 示例

Spring Boot – CrudRepository 示例 Spring Boot 建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。由于其快速的生产就绪环境&#xff0c;使开发人员能够直接专注于逻辑&#xff0c;而不必费力配置和设置&#xff0c;因此如今它正成为开发人员的最爱。Spring Boot 是…...

jenkins入门6 --拉取代码

Jenkins代码拉取 需要的插件&#xff0c;缺少的安装下 新建一个item,选择freestyle project 源码管理配置如下&#xff1a;需要添加git库地址&#xff0c;和登录git的用户密码 配置好后执行编译&#xff0c;成功后拉取的代码在工作空间里...

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热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

偃动访无穿戴动作捕捉系统:赋能多行业开启动作捕捉新篇章

在当今科技飞速发展的时代&#xff0c;动作捕捉技术正以前所未有的态势深入到社会发展的各个领域&#xff0c;成为众多行业不可或缺的重要助力。从早期的惯性动捕与光捕技术&#xff0c;到如今更为先进的无标记动捕技术&#xff0c;动作捕捉领域不断迎来革新与突破。 无标记动…...

mikro-orm 和typeorm 对比

以下是Mikro-ORM和TypeORM的详细对比&#xff1a; 设计理念与架构 Mikro-ORM&#xff1a;基于数据映射器、工作单元和身份映射模式。这种设计使得它在管理内存中实体状态方面表现优异&#xff0c;能够自动处理事务&#xff0c;当调用em.flush()时&#xff0c;所有计算出的更改…...

Docker入门之docker基本命令

Docker入门之docker基本命令 官方网站&#xff1a;https://www.docker.com/ 1. 拉取官方镜像并创建容器&#xff08;以redis为例&#xff09; 拉取官方镜像 docker pull redis# 如果不需要添加到自定义网络使用这个命令&#xff0c;如需要&#xff0c;直接看第二步 docker r…...

mysql的一些函数及其用法

mysql 1-来自于leetcode1517的题目 表: Users------------------------ | Column Name | Type | ------------------------ | user_id | int | | name | varchar | | mail | varchar | ------------------------已知一个表&#xff0c;它的…...

NO.3 《机器学习期末复习篇》以题(问答题)促习(人学习),满满干huo,大胆学大胆补!

目录 &#x1f50d; 1. 对于非齐次线性模型 &#xff0c;试将其表示为齐次线性模型形式。 ​编辑 &#x1f50d; 2. 某汽车公司一年内各月份的广告投入与月销量数据如表3-28所示&#xff0c;试根据表中数据构造线性回归模型&#xff0c;并使用该模型预测月广告投入为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 -音频变音(听不出说话的人是谁)

学习参考来源&#xff1a; https://zhuanlan.zhihu.com/p/634848804 https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Audio_API 实际效果&#xff1a; http://www.qingkong.zone/laboratory?typeaudio-confusion 前言 本文内容可结合上面学习参考来源&#xff0c;结合…...

鸿蒙UI(ArkUI-方舟UI框架)

参考&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-layout-development-overview-V13 ArkUI简介 ArkUI&#xff08;方舟UI框架&#xff09;为应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff…...

常见的http状态码 + ResponseEntity

常见的http状态码 ResponseStatus(HttpStatus.CREATED) 是 Spring Framework 中的注解&#xff0c;用于指定 HTTP 响应状态码。 1. 基本说明 HttpStatus.CREATED 对应 HTTP 状态码 201表示请求成功且创建了新的资源通常用于 POST 请求的处理方法上 2. 使用场景和示例 基本…...

pikachu - Cross-Site Scripting(XSS)

pikachu - Cross-Site Scripting&#xff08;XSS&#xff09; 声明&#xff01; 笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人无关&#xff0c;切勿触碰法律底线&#xff0c;否则后果自负&#x…...

操作系统之文件系统的基本概念

目录 用户和磁盘视角的文件 文件控制块&#xff08;FCB&#xff09;和索引结点&#xff08;inode&#xff09; 文件的操作 创建文件&#xff08;create系统调用&#xff09; 写文件&#xff08;write系统调用&#xff09; 读文件&#xff08;read系统调用&#xff09; 重…...

深入探讨 Android 中的 AlarmManager:定时任务调度及优化实践

引言 在 Android 开发中&#xff0c;AlarmManager 是一个非常重要的系统服务&#xff0c;用于设置定时任务或者周期性任务。无论是设置一个闹钟&#xff0c;还是定时进行数据同步&#xff0c;AlarmManager 都是不可或缺的工具之一。然而&#xff0c;随着 Android 系统的不断演…...

西电-算法分析-研究生课程复习笔记

24年秋的应该是张老师最后一次用卷面考试&#xff0c;他说以后这节课的期末考试都是在OJ上刷题了张老师上课还挺有意思的&#xff0c;上完之后能学会独立地思考算法设计问题了。整节课都在强调规模压缩这个概念&#xff0c;考试也是考个人对这些的理解&#xff0c;还挺好玩的哈…...

新手入门:利用快马平台快速理解与模拟openclaw重启命令执行

今天想和大家分享一个特别适合机器人编程新手的实践项目——如何在安全可控的环境下理解和模拟openclaw机械爪的重启命令。这个过程中我发现了InsCode(快马)平台这个神器&#xff0c;它让整个学习过程变得异常简单。 为什么需要专门学习重启命令&#xff1f; 机械爪作为机器人常…...

英雄联盟录像编辑终极指南:免费开源工具League Director完全教程

英雄联盟录像编辑终极指南&#xff1a;免费开源工具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. 刚体运动的基础&#xff1a;自由度概念解析 刚体运动描述是机器人学中最基础的数学工具&#xff0c;就像学英语要先掌握26个字母一样。我第一次接触这个概念时&#xff0c;被各种专业术语搞得晕头转向&#xff0c;直到把机械臂末端执行器想象成自己手中的螺丝刀才豁然开朗。…...

RobotFramework自动化测试实战:从关键字设计到复杂循环处理

RobotFramework自动化测试实战&#xff1a;从关键字设计到复杂循环处理 在软件测试领域&#xff0c;自动化测试已经成为提升效率、保证质量的必备手段。而RobotFramework作为一款基于Python的开源自动化测试框架&#xff0c;凭借其关键字驱动的设计理念和高度可扩展性&#xf…...

Pixel Language Portal效果实测:Hunyuan-MT-7B在游戏对话文本中的语气保留与文化适配能力

Pixel Language Portal效果实测&#xff1a;Hunyuan-MT-7B在游戏对话文本中的语气保留与文化适配能力 1. 引言&#xff1a;当翻译遇见像素冒险 在游戏本地化领域&#xff0c;传统翻译工具往往难以捕捉角色对话中的独特语气和文化内涵。Pixel Language Portal&#xff08;像素…...

破解3DS游戏格式兼容难题:3dsconv工具的技术实现与应用指南

破解3DS游戏格式兼容难题&#xff1a;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时间的核心子系统&#xff0c;它决定了系统中各个进程的执行顺序和时间分配。随着系统复杂性的增加和硬件技术的发展&#xff0c;进程调度面临着越来越多的挑战。本文将深入探讨Linux内核中进程调度的高级…...

老游戏兼容性终极解决方案:让经典游戏在现代Windows系统重生

老游戏兼容性终极解决方案&#xff1a;让经典游戏在现代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 姆明快闪店美陈设计为何刷屏出圈?肆墨设计

在商业空间同质化加剧的当下&#xff0c;快闪店已成为品牌破圈、链接消费者的核心载体。MO&Co. 携手经典 IP 姆明打造的「姆明划水俱乐部」全国首展&#xff0c;以成熟的美陈设计逻辑&#xff0c;实现了品牌调性、IP 情感与商业转化的三重统一&#xff0c;为 IP 联名快闪美…...

告别手动造数据!用JMeter JSR223预处理程序+Groovy脚本,5分钟搞定接口签名和AES加密

告别手动造数据&#xff01;用JMeter JSR223预处理程序Groovy脚本&#xff0c;5分钟搞定接口签名和AES加密 性能测试工程师最头疼的莫过于每次执行测试前&#xff0c;都要手动计算接口签名、拼接参数、加密敏感数据。这种重复性工作不仅耗时耗力&#xff0c;还容易出错。想象一…...