当前位置: 首页 > 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 的主要功能包括…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...