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

EFCore pgsql Join 查询

  1. 安装包
   > Microsoft.EntityFrameworkCore              6.0.35   6.0.35> Microsoft.EntityFrameworkCore.Tools        6.0.35   6.0.35> Npgsql.EntityFrameworkCore.PostgreSQL      6.0.29   6.0.29
  1. 定义实体等

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;namespace EFCoreJoinQuery
{public class EFCoreHelperDbContext:DbContext{public EFCoreHelperDbContext(DbContextOptions<EFCoreHelperDbContext> options):base(options){}public DbSet<Student> Students { get; set; }public DbSet<School> Schools { get; set;}public DbSet<StudentHobby> StudentHobbys { get;set; }protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.HasDefaultSchema("ellis"); //因为这里我是将表生成到这个schemabase.OnModelCreating(modelBuilder);modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);  }}public class School{public int SchoolId { get; set; }public string Name { get; set; }}public class SchoolConfig : IEntityTypeConfiguration<School>{public void Configure(EntityTypeBuilder<School> builder){builder.ToTable("school");builder.HasKey(x => x.SchoolId);builder.Property(x => x.Name).IsRequired().HasColumnName("name");builder.Property(x=>x.SchoolId).HasColumnName("school_id").ValueGeneratedOnAdd();}}public class Student{public int StudentId { get; set;}public string Name { get; set; }public int SchoolId { get; set; }}public class StudentConfig : IEntityTypeConfiguration<Student>{public void Configure(EntityTypeBuilder<Student> builder){builder.ToTable("student");builder.HasKey(x => x.StudentId);builder.Property(x => x.Name).IsRequired().HasColumnName("name");builder.Property(x => x.SchoolId).HasColumnName("school_id");builder.Property(x => x.StudentId).HasColumnName("student_id").ValueGeneratedOnAdd();}}public class StudentHobby{public int HobbyId { get; set; }public string Name { get; set; }public int StudentId { get; set; }}public class StudentHobbyConfig : IEntityTypeConfiguration<StudentHobby>{public void Configure(EntityTypeBuilder<StudentHobby> builder){builder.ToTable("student_hobby");builder.HasKey(x => x.HobbyId);builder.Property(x=>x.Name).IsRequired().HasColumnName("name");builder.Property(x => x.StudentId).HasColumnName("student_id");builder.Property(x => x.HobbyId).HasColumnName("hobby_id").ValueGeneratedOnAdd();}}
}
  1. DI

这里需要说明的是需要配置MigrationsHistoryTable,因为我这里是将表迁移到ellis这个schema,所以迁移的历史表也需要创建到这个schema中

builder.Services.AddDbContext<EFCoreHelperDbContext>((sp, options) =>
{options.UseNpgsql("Host=192.168.214.133;Port=32222;Database=postgresdb;Username=postgresadmin;Password=admin123;SearchPath=ellis;",x=>x.MigrationsHistoryTable(HistoryRepository.DefaultTableName,"ellis")).LogTo(Console.WriteLine, new[] { DbLoggerCategory.Database.Command.Name }, LogLevel.Information).EnableSensitiveDataLogging();
});
  1. 迁移
add-migration ellis
update-databse ellis
  1. controller使用
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;namespace EFCoreJoinQuery.Controllers
{[Route("api/[controller]/[action]")][ApiController]public class JoinController : ControllerBase{private readonly EFCoreHelperDbContext _eFCoreHelperDbContext;public JoinController(EFCoreHelperDbContext eFCoreHelperDbContext){_eFCoreHelperDbContext = eFCoreHelperDbContext;}//两张表[HttpGet]public async  Task<IActionResult> Query2Join(){// 单列Joinvar value = from s in _eFCoreHelperDbContext.Schoolsjoin st in _eFCoreHelperDbContext.Studentson s.SchoolId equals st.SchoolIdselect new { SchoolName = s.Name, StudentName = st.Name};//多列Join//on        new { m1.field1, m1.field2 }//      equals new { m2.field1, m2.field2 }return Ok(value);}//三张表[HttpGet]public async Task<IActionResult> Query3Join(){var value = from s in _eFCoreHelperDbContext.Schoolsjoin st in _eFCoreHelperDbContext.Studentson s.SchoolId equals st.SchoolIdjoin h in _eFCoreHelperDbContext.StudentHobbyson st.StudentId equals  h.StudentId//因为hobby是多个,这里需要分组一次group h by new { schollName = s.Name,studentName = st.Name } into groupedselect new{SchoolName = grouped.Key.schollName,StudentName = grouped.Key.studentName,HobbyNames = string.Join(", ", grouped.Select(g => g.Name))};return Ok(value);}}
}

https://www.tektutorialshub.com/entity-framework-core/join-query-in-ef-core/

相关文章:

EFCore pgsql Join 查询

安装包 > Microsoft.EntityFrameworkCore 6.0.35 6.0.35> Microsoft.EntityFrameworkCore.Tools 6.0.35 6.0.35> Npgsql.EntityFrameworkCore.PostgreSQL 6.0.29 6.0.29定义实体等 using Microsoft.EntityFrameworkCore; using Micros…...

力扣80:删除有序数组中重复项

给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例 1&a…...

等保测评:安全计算环境的详细讲解

安全计算环境是信息安全领域中的一个重要概念&#xff0c;旨在确保在计算过程中数据的机密性、完整性和可用性。随着信息技术的迅猛发展和网络攻击的日益频繁&#xff0c;构建安全计算环境显得尤为重要。本文将详细探讨安全计算环境的主要组成部分、特性及其在信息安全中的作用…...

[Java基础] Lambda 表达式

往期回顾 [Java基础] 基本数据类型 [Java基础] 运算符 [Java基础] 流程控制 [Java基础] 面向对象编程 [Java基础] 集合框架 [Java基础] 输入输出流 [Java基础] 异常处理机制 [Java基础] Lambda 表达式 目录 概述 Lambda 表达式的基本语法 应用场景 并发编程 集合…...

《深入掌握高德地图 API:全面调用指南与最佳实践》

本文 高德地图 API 调用指南引言高德 API 的基础设置注册和获取 API Key 基本 API 调用结构地理编码与逆地理编码地理编码&#xff08;Geocoding&#xff09;逆地理编码&#xff08;Reverse Geocoding&#xff09;注意事项 路径规划&#xff08;Direction API&#xff09;驾车路…...

【功能安全】系统架构设计

目录 01 系统架构介绍 02 投票逻辑架构介绍 03 SIS架构 04 ADS域控制器架构设计 01 系统架构介绍 法规GBT 34590 Part4 part10定义的软件要求、设计和测试子阶段之间的关系&#xff08;其中的3-7个人建议翻译为初始架构设计更合理 &#xff09; 系统架构的作用&#xf…...

FPGA实现PCIE视频采集转USB3.0输出,基于XDMA+FT601架构,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的PCIE方案本博已有的USB通信方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存FT601功能和硬件电路FT601读时序解读FT601写时序解读U…...

基于docker-compose编排部署微服务快速开发框架

1. 规划节点 节点规划&#xff0c;见表1。 表1 节点规划 IP主机名节点10.24.2.10masterdocker-compose节点 2. 基础准备 Docker和Docker Compose已安装完成&#xff0c;将提供的软件包Pig.tar.gz上传至master节点/root目录下并解压。 案例实施 1. 基础环境准备 &#x…...

【Java面试——并发编程——相关类和关键字——Day6】

1. Future 1.1 Future类 Future 类是异步思想的典型运用&#xff0c;主要用在一些需要执行耗时任务的场景&#xff0c;避免程序一直原地等待耗时任务执行完成&#xff0c;执行效率太低。具体来说是这样的&#xff1a;当我们执行某一耗时的任务时&#xff0c;可以将这个耗时任…...

Android 两种方式实现类似水波扩散效果

两种方式实现类似水波扩散效果&#xff0c;&#xff08;相比较而言&#xff0c;自定义view的效果更好点&#xff0c;动画实现起来更方便点。&#xff09; 自定义view实现动画实现 自定义view实现 思路分析&#xff1a;通过canvas画圆&#xff0c;每次改变圆半径和透明度&…...

基于SSM+小程序的垃圾分类管理系统(垃圾2)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM小程序的垃圾分类管理系统实现了管理员及用户。 1、管理员功能结构图&#xff0c;管理员功能有个人中心&#xff0c;管理员管理&#xff0c;基础数据管理、论坛管理、垃圾信息管理…...

微服务网格Istio介绍

微服务网格Istio 介绍服务注册和发现服务度量灰度发布 Istio核心特性断路器互动1&#xff1a;举个生活中的例子解释断路器互动2&#xff1a;服务降级&#xff08;提高用户体验效果&#xff09; 超时重试多路由规则 Istio架构istio组件详解PilotEnvoyCitadelGalleyIngressgatewa…...

【MySQL】视图与用户管理——MySQL

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 目录 视图 基本使用 视图规则和限制 用户管理 用户 用户信息 创建用户 删除用户 修改用户密码 数据库的权限 给用户授权 回收权限 视图 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&am…...

Go语言中三个输入函数(scanf,scan,scanln)的区别

Go语言中三个输入函数(scanf,scan,scanln)的区别 在 Go 语言中&#xff0c;fmt 包提供了三种输入函数&#xff1a;Scanf、Scan 和 Scanln。这三个函数都是用于从标准输入读取数据并存储到变量中&#xff0c;但是它们在处理输入的方式上有所不同。下面详细解读每个函数的特点和…...

uniapp使用html2canvas时,页面内的image元素模糊

不废话很简单只需要将image改成img就行 改之前 改之后 原因可能是因为uniapp里面的image标签做了某种处理...

华为交换机堆叠

堆叠方式 堆叠卡堆叠&#xff1a; 堆叠卡堆叠又可以分为两种情况&#xff1a; 交换机之间通过专用的堆叠插卡ES5D21VST000及专用的堆叠线缆连接。堆叠卡集成到交换机后面板上&#xff0c;交换机通过集成的堆叠端口及专用的堆叠线缆连接。 业务口堆叠&#xff1a; 业务口堆…...

Spring Boot框架下中小企业设备管理系统开发

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理中小企业设备管理系统的相关信息成为必然。…...

鸿蒙开发融云demo消息未读数

鸿蒙开发融云demo消息未读数 跟着我一步步搭建带界面的融云demo&#xff0c;这次是要显示未读数&#xff0c;未读数有两个&#xff0c;一个是消息列表的未读数&#xff0c;一个是主页消息tab上的未读数。 一、消息列表的未读数 先看下效果图&#xff1a; 关键代码如下&#…...

非对称加密算法(RSA):原理、应用与代码实现

一、引言 在当今数字化时代&#xff0c;信息安全成为了至关重要的议题。非对称加密算法作为保障信息安全的核心技术之一&#xff0c;在数据加密、数字签名、身份验证等领域发挥着不可或缺的作用。其中&#xff0c;RSA 算法以其可靠性、安全性和广泛的适用性&#xff0c;成为了…...

docker部署SQL审核平台Archery

1、概述 Archery 是一个开源的 SQL 审核平台,专为数据库的 SQL 运维和管理而设计,广泛应用于企业的数据库运维工作中。其主要功能是帮助数据库管理员和开发人员实现 SQL 审核、SQL 执行、在线执行、查询、工单管理、权限控制等数据库管理相关的操作。 Archery 的主要功能包括…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

深入解析 ReentrantLock:原理、公平锁与非公平锁的较量

ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...

第22节 Node.js JXcore 打包

Node.js是一个开放源代码、跨平台的、用于服务器端和网络应用的运行环境。 JXcore是一个支持多线程的 Node.js 发行版本&#xff0c;基本不需要对你现有的代码做任何改动就可以直接线程安全地以多线程运行。 本文主要介绍JXcore的打包功能。 JXcore 安装 下载JXcore安装包&a…...

RFID推动新能源汽车零部件生产系统管理应用案例

RFID推动新能源汽车零部件生产系统管理应用案例 一、项目背景 新能源汽车零部件场景 在新能源汽车零部件生产领域&#xff0c;电子冷却水泵等关键部件的装配溯源需求日益增长。传统 RFID 溯源方案采用 “网关 RFID 读写头” 模式&#xff0c;存在单点位单独头溯源、网关布线…...

湖北理元理律师事务所:债务清偿方案中的法律技术革新

文/金融法律研究组 当前债务服务市场存在结构性矛盾&#xff1a;债权人追求快速回款&#xff0c;债务人需要喘息空间。湖北理元理律师事务所通过创新法律技术&#xff0c;在《企业破产法》《民法典》框架下构建梯度清偿模型&#xff0c;实现多方利益平衡。 一、个人债务优化的…...

RK3568项目(七)--uboot系统之外设与PMIC详解

目录 一、引言 二、按键 ------>2.1、按键种类 ------------>2.1.1、RESET ------------>2.1.2、UPDATE ------------>2.1.3、PWRON 部分 ------------>2.1.4、RK809 PMIC ------------>2.1.5、ADC按键 ------------>2.1.6、ADC按键驱动 ------…...