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

Web开发:ORM框架之使用Freesql的导航属性

一、什么时候用导航属性

        看数据库表的对应关系,一对多的时候用比较好,不用多写一个联表实体,而且查询高效

 二、为实体配置导航属性

1.给关系是一的父表实体加上:

    [FreeSql.DataAnnotations.Navigate(nameof(子表.子表关联字段))]public List<子表> xxx { get; set; } = new List<子表>();

2.给关系是n的子表实体加上:

    [FreeSql.DataAnnotations.Navigate(nameof(子表关联字段))]public 父表 yyy { get; set; }

3.Demo例子:(一个省份对应多个城市)

/// <summary>
/// 1
/// </summary>
[Table("Province")]
public class Province
{[FreeSql.DataAnnotations.Column(IsPrimary = true, IsIdentity = true, Name = "Id")]public int Id { get; set; }[Column("ProvinceCode")]public int? ProvinceCode { get; set; }[FreeSql.DataAnnotations.Navigate(nameof(City.ProvinceId))]public List<City> citys { get; set; } = new List<City>();
}/// <summary>
/// n
/// </summary>
[Table("City")]
public class City
{[FreeSql.DataAnnotations.Column(IsPrimary = true, IsIdentity = true, Name = "Id")]public int Id { get; set; }[Column("CityCode")]public int? CityCode { get; set; }[Column("ProvinceId")]public int ProvinceId { get; set; }[Column("CityGroup")]public int? CityGroup { get; set; }[FreeSql.DataAnnotations.Navigate(nameof(ProvinceId))]public Province province { get; set; }
}

 三、怎么用导航属性

原理:左外连接

总结:使用关键字Include(找父表)、IncludeMany(找子表)

// 一对多导航属性关联查询
// 01 无条件查询
// 导航属性带出其父表(可序列化)
var list1 = MSfsql.Select<City>().Include(x => x.province).ToList();// 导航属性带出其子表(不可序列化,因为子表含有父表字段,会一直引用下去)
var list2 = MSfsql.Select<Province>().IncludeMany(x => x.citys).ToList();// 02 有条件查询
// 【子表 -> 父表】
var query1 = MSfsql.Select<City>().Where(x => (x.province.Id < 20) && (x.Id == 1 || x.Id == 198)) //先对本表(子表)筛选,条件可含子表 父表.Include(x=>x.province) // 选择带出查询结果对应的那个父表.ToList();// 【父表->子表】
var query2 = MSfsql.Select<Province>().Where(x => x.Id < 20 && x.citys.Any(x=> x.Id ==1 || x.Id==198 )) //先对本表(父表)筛选,条件可含子表 父表.IncludeMany(x => x.citys) // 选择带出查询结果对应的多个子表.ToList();var query3 = MSfsql.Select<Province>().Where(x => x.Id < 20 && x.citys.Any(x => x.Id == 1 || x.Id == 198)) //先对本表(父表)筛选,条件可含子表 父表.IncludeMany(x => x.citys, then => then.Where(x=> x.CityGroup == 1)) // 选择带出子表,并且要求子表具备一定条件.ToList();

四、一对多免导航属性配置的写法

1.实体

        仅给关系是一的父表实体加上List<子表>字段即可

/// <summary>
/// 1
/// </summary>
[Table("Province")]
public class Province
{[FreeSql.DataAnnotations.Column(IsPrimary = true, IsIdentity = true, Name = "Id")]public int Id { get; set; }[Column("ProvinceCode")]public int? ProvinceCode { get; set; }//[FreeSql.DataAnnotations.Navigate(nameof(City.ProvinceId))]public List<City> citys { get; set; } = new List<City>();
}/// <summary>
/// n
/// </summary>
[Table("City")]
public class City
{[FreeSql.DataAnnotations.Column(IsPrimary = true, IsIdentity = true, Name = "Id")]public int Id { get; set; }[Column("CityCode")]public int? CityCode { get; set; }[Column("ProvinceId")]public int ProvinceId { get; set; }[Column("CityGroup")]public int? CityGroup { get; set; }// [FreeSql.DataAnnotations.Navigate(nameof(ProvinceId))]// public Province province { get; set; }
}

2.查询方法

原理:先查满足条件的父表,提取出这些父表ID,再通过提取的父表ID查子表,freesql内部代码会通过IncludeMany里面的表达式树关联父表和子表

var query4 = fsql.Select<Province>().Where(x=>x.Id > 10) //此处写父表 or 子表的查询条件,筛选出父表.IncludeMany(x => x.citys.Where(y => x.Id == y.ProvinceId)) //此处写关联条件,带出子表.ToList();//本质是查两次,freesql内部有代码优化机制

相关文章:

Web开发:ORM框架之使用Freesql的导航属性

一、什么时候用导航属性 看数据库表的对应关系&#xff0c;一对多的时候用比较好&#xff0c;不用多写一个联表实体&#xff0c;而且查询高效 二、为实体配置导航属性 1.给关系是一的父表实体加上&#xff1a; [FreeSql.DataAnnotations.Navigate(nameof(子表.子表关联字段))]…...

【docker】namespace底层机制

Linux 的 Namespace 机制是实现容器化&#xff08;如 Docker、LXC 等&#xff09;的核心技术之一&#xff0c;它通过隔离系统资源&#xff08;如进程、网络、文件系统等&#xff09;为进程提供独立的运行环境。其底层机制涉及内核数据结构、系统调用和进程管理。以下是其核心实…...

【每天认识一个漏洞】url重定向

&#x1f31d;博客主页&#xff1a;菜鸟小羊 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 常见应用场景 主要是业务逻辑中需要进行跳转的地方。比如登录处、注册处、访问用户信息、订单信息、加入购物车、分享、收…...

端口映射/内网穿透方式及问题解决:warning: remote port forwarding failed for listen port

文章目录 需求&#xff1a;A机器是内网机器&#xff0c;B机器是公网服务器&#xff0c;想要从公网&#xff0c;访问A机器的端口方式&#xff1a;端口映射&#xff0c;内网穿透&#xff0c;使用ssh打洞端口&#xff1a;遇到问题&#xff1a;命令执行成功&#xff0c;但是端口转发…...

Polardb开发者大会

这是第二次参加这个大会 还有不少老朋友 好多年没有这种经历了–大会讲的我不是很懂 10几年前参会&#xff0c;那时候自己不懂。后来就慢慢懂了。这些年参会都虽然还在不断学习&#xff0c;但是没觉得自己差距很大了。 这次出来很不一样&#xff0c;一堆新的技能&#xff0c;这…...

从二维随机变量到多维随机变量

二维随机变量 设 X X X和 Y Y Y是定义在同一样本空间 Ω \varOmega Ω上的两个随机变量&#xff0c;称由它们组成的向量 ( X , Y ) (X, Y) (X,Y)为二维随机变量&#xff0c;亦称为二维随机向量&#xff0c;其中称 X X X和 Y Y Y是二维随机变量的分量。 采用多个随机变量去描述…...

Vulnhub靶场 Kioptrix: Level 1.3 (#4) 练习

目录 0x00 环境准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用0x04 总结 0x00 环境准备 下载&#xff1a;https://download.vulnhub.com/kioptrix/Kioptrix4_vmware.rar 解压后得到的是vmdk文件。在vm中新建虚拟机&#xff0c;稍后安装操作系统&#xff0c;系统选…...

权重生成图像

简介 前面提到的许多生成模型都有保存了生成器的权重,本章主要介绍如何使用训练好的权重文件通过生成器生成图像。 但是如何使用权重生成图像呢? 一、参数配置 ima_size 为图像尺寸,这个需要跟你模型训练的时候resize的时候一样。 latent_dim为噪声维度,一般的设置都是…...

实时时钟(RTC)/日历芯片PCF8563的I2C读写驱动(2):功能介绍

0 参考资料 PCF8563数据手册&#xff08;第 11 版——2015 年 10 月 26 日&#xff09;.pdf 1 功能介绍 1.1 实时时钟&#xff08;RTC&#xff09;/日历 &#xff08;1&#xff09;PCF8563支持实时时钟&#xff08;RTC&#xff09;&#xff0c;提供时、分、秒信息。对应寄存器…...

猿大师播放器:HTML内嵌VLC播放RTSP视频流,无需转码,300ms级延迟,碾压服务器转码方案

在智慧城市、工业安全、应急指挥等关键领域&#xff0c;实时视频监控已成为守护生命与财产的核心防线‌。然而&#xff0c;行业普遍面临三大矛盾&#xff1a; ‌实时性要求与高延迟矛盾‌&#xff1a;火灾蔓延速度达1米/秒&#xff0c;化工泄漏扩散仅需数秒&#xff0c;传统方…...

牛客刷题自留-深度学习

1、当在卷积神经网络中加入池化层(pooling layer)时&#xff0c;平移变换的不变性会被保留&#xff0c;是吗&#xff1f; 正常答案: C A 不知道 B 看情况 C 是 D 否 平移变换不变性的概念 平移变换不变性指的是当输入图像发生小范围的平移时&#xff0c;模型的输出结果不会发…...

AI 时代下,操作系统如何进化与重构?

AI 时代下&#xff0c;操作系统如何进化与重构&#xff1f; AI时代服务器操作系统技术挑战2024 龙蜥操作系统大会最关注的是哪些议题分享与讨论&#xff1f;对于操作系统未来的发展趋势&#xff0c;有哪些观察和建议 2024 龙蜥操作系统大会&#xff08;OpenAnolis Conference&a…...

Hadoop最新版本hadoop-3.4.1搭建伪分布式集群以及相关报错解决

一&#xff1a;概述 Hadoop 是一个开源的分布式计算框架&#xff0c;广泛应用于大数据处理。伪分布式集群是 Hadoop 的一种部署模式&#xff0c;它可以在单台机器上模拟集群环境&#xff0c;适合初学者进行学习和实验。本文将详细介绍如何在单台机器上搭建 Hadoop 3.4.1 的伪分…...

Android SDK与NDK的区别

Android SDK&#xff08;Software Development Kit&#xff09;与NDK&#xff08;Native Development Kit&#xff09;在Android应用开发中各自扮演着重要角色&#xff0c;它们之间存在显著的区别。以下是Android SDK与NDK的主要区别&#xff1a; 一、定义与用途 Android SDK…...

【保姆级视频教程(二)】YOLOv12训练数据集构建:标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测!

【2025全站首发】YOLOv12训练数据集构建&#xff1a;标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测&#xff01; 文章目录 1. 数据集准备1.1 标签格式转换1.2 数据集划分1.3 yaml配置文件创建 2. 训练验证 1. 数据集准备 示例数据集下载链接&#xff1a;P…...

smolagents学习笔记系列(八)Examples - Master you knowledge base with agentic RAG

这篇文章锁定官网教程中 Examples 章节中的 Master you knowledge base with agentic RAG 文章&#xff0c;主要介绍了如何将 agent 和 RAG 结合使用。 官网链接&#xff1a;https://huggingface.co/docs/smolagents/v1.9.2/en/examples/rag&#xff1b; Agentic RAG 在之前的…...

满血版DeepSeek R1使用体验

硅基流动的满血版DeepSeek&#xff0c;通过CheeryStudio可以轻松访问&#xff0c;告别DeepSeek官网服务器繁忙&#xff0c;https://cloud.siliconflow.cn/i/ewlWR6A9 即可注册 https://cloud.siliconflow.cn/i/ewlWR6A9https://cloud.siliconflow.cn/i/ewlWR6A9 一、硅基流动平…...

Java类中的this操作

在Java中,`this` 是一个关键字,用于引用当前对象的实例。它通常在类的方法或构造器中使用,主要有以下几种用途: 1. 区分成员变量和局部变量 当成员变量与局部变量同名时,使用 `this` 可以明确引用当前对象的成员变量。 public class Person { private String name; …...

LeetCode刷题---双指针---532

数组中的 k-diff 数对 532. 数组中的 k-diff 数对 - 力扣&#xff08;LeetCode&#xff09; 题目 给你一个整数数组 nums 和一个整数 k&#xff0c;请你在数组中找出 不同的 k-diff 数对&#xff0c;并返回不同的 k-diff 数对 的数目。 k-diff 数对定义为一个整数对 (nums[…...

cpp单调栈模板

题目如下 如果利用暴力解法&#xff0c;时间复杂度是O&#xff08;n^2&#xff09; 只能过60%的数据 AC解法&#xff1a; 利用单调栈的算法&#xff0c;单调栈里存的是之前遍历过的元素的下标&#xff0c;如果满足while的条件就将栈顶元素记录&#xff0c;然后将其弹出&#x…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...