ABP 数据库 -- ABP&EF中的多表、关联查询
本文介绍一下ABP中的多表查询。
1.创建实体
多表查询,在ABP或者EF中都很简单,这里我们创建一个Demo,一个学生实体、一个学校实体。
学校里面可以有很多学生,学生有一个学校。
实体如下:
学校
public class School:Entity<long>
{ public string Name { get; set; } public string Address { get; set; }
/// <summary>
/// 学校里面的学生们
/// </summary>
public List<Student> Students { get; set; } }
学生
public class Student: Entity<long>
{ public string Name { get; set; }
/// <summary>
/// 学生所在的学校
/// </summary>
public School School { get; set; } }
2.创建数据
现在我们来创建一下Student与School的数据。
School的数据如下:

Student的数据如下:

可以看到,Student名字为alun1、alun2、alun3的对应School1、2、1。
3.查询实体
下面,我们在应用层AppService下面用Repository来查询结果如何。
//用GetAllIncluding方法来查询所有学生的信息,结果包含School实体
var listStudent1 = _studentRepository.GetAllIncluding(s=>s.School).ToList(); //用GetAll方法来查询所有学生的信息,结果包含School实体
var listStudent2 = _studentRepository.GetAll().ToList(); //用GetAll方法来查询所有学校的信息,结果包含List Students实体
var listSchool1 = _schoolRepository.GetAll().ToList(); //用GetAllIncluding方法来查询所有学校的信息,结果包含List Students实体
var listSchool2 = _schoolRepository.GetAllIncluding(s=>s.Students).ToList();
可以看到,结果都包含Student包含School的实体,而且School包含集合是Students。
值得注意的是,这里的GetAllIncluding与GetAll的区别是,GetAllIncluding是明确的指明我要查询的实体里面包含的其他表的实体也要查询出来。
例如,GetAllIncluding(s=>s.School),告诉EF,查询Student的时候,请把它关联的School也查询出来。
如果有多个实体关联,请用逗号“,”隔开。例如 GetAllIncluding(s=>s.School, s=>s.Class)
对于ABP,如果是多租户,用户等多租户的信息查询不到的情况下,在查询前请加下面一句话
CurrentUnitOfWork.DisableFilter(AbpDataFilters.MayHaveTenant, AbpDataFilters.MustHaveTenant);
因为在做多租户的查询是,ABP默认会加一些Filter,只能查询当前登录用户的信息,其他用户的信息Filter掉。
所以上面的意思是去掉多租户查询时的Filter
可以关注本人的公众号,多年经验的原创文章共享给大家。

ABP 数据库 -- ABP&EF中的多表、关联查询的更多相关文章
- 详解MongoDB中的多表关联查询($lookup)
一. 聚合框架 聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息. 聚合管道操作主要包含下面几个部分: 命令 功能描述 $projec ...
- 详解MongoDB中的多表关联查询($lookup) (转)
一. 聚合框架 聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息. 聚合管道操作主要包含下面几个部分: 命令 功能描述 $projec ...
- EF中使用linq进行关联查询
EF使用linq进行多表查询是完全可以的,最后ToList()调用的时候回产生一条分页的sql语句,所以并不是全部查询再分页的.所以不会影响查询的性能 public void TestLinq() { ...
- mysql数据库-初始化sql建库建表-关联查询投影问题
下面是一个简易商城的几张表的创建方式 drop database if exists shop ; create database shop CHARACTER SET 'utf8' COLLATE ...
- Mysql中实现多表关联查询更新操作
今天一下要记录一下才行了,每次都要去网上查找方法,每次都难找得要命 Mysql在更新某些字段的数据时,有时候会依据其他表的数据进行更新,需要通过关联后对不同的行更新不同的值,传统的update set ...
- 数据库MySQL中关于“多表关联更新”的那些事
在常见的sql中,我们经常在查询中进行多表关联查询,用的比较熟练.今天在开发中遇到一个实际业务场景是多表关联更新,一时不知所措.本着多学习的态度,没有直接写java代码去实现,终于把多表关联更新的sq ...
- ORACLE数据库多表关联查询效率问题解决方案
最近在做项目中遇到多表关联查询排序的效率问题(5张以上40W+数据的表),查询一次大概要20多秒,经过一番苦思冥想,处理方案如下: 1.软件设计初期,需要一对一关联的表应该设计在一张大表里,这样虽然字 ...
- Spring Boot入门系列(十七)整合Mybatis,创建自定义mapper 实现多表关联查询!
之前讲了Springboot整合Mybatis,介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.mybatis 插件自动生成的mappe ...
- Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询
在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...
- RDIFramework.NET 中多表关联查询分页实例
RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为 ...
随机推荐
- iOS_URI跳转方式多种地图导航的代码实践
先来看一下我们要达到什么效果,就是当我们点导航的时候,会弹出下面这个选择列表. 当然,如果没有安装某个地图APP,那么对应的选项是不会出现的.检测APP是否安装,只要调用下面这个方法就可以了 [[UI ...
- node-webkit学习(2)基本结构和配置
node-webkit学习(2)基本结构和配置 文/玄魂 目录 node webkit学习(2)基本结构和配置 前言 2.1 基本程序结构 2.2 package.json 2.2.1 必须的配置 ...
- 剑指offer编程题Java实现——面试题4后的相关题目
题目描述: 有两个排序的数字A1和A2,内存在A1的末尾有足够多的空余空间容纳A2.请实现一个函数,把A2中的所有数字插入到A1中并且所有的数字是排序的. 还是利用从后向前比较两个数组中的数字的方式来 ...
- SpringBoot2 配置
一.Properties与Yaml SpringBoot支持properties与yaml两种配置文件application.properties/application.yml yaml简单使用 1 ...
- MariaDB 库的基本操作(2)
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...
- PICE(3):CassandraStreaming - gRPC-CQL Service
在上一篇博文里我们介绍了通过gRPC实现JDBC数据库的streaming,这篇我们介绍关于cassandra的streaming实现方式.如果我们需要从一个未部署cassandra的节点或终端上读取 ...
- C#6.0语言规范(十八) 不安全代码
前面章节中定义的核心C#语言与C和C ++的区别在于它省略了作为数据类型的指针.相反,C#提供了引用和创建由垃圾收集器管理的对象的能力.这种设计与其他功能相结合,使C#成为比C或C ++更安全的语言. ...
- iOS-IAP内购的那些事(iOS内购漏单的问题)
前言 说起内购,其实挺令开发者厌烦的,原因呢,先不说漏单的问题,首先苹果要扣除30%的销售额哦,可恨不?(我觉得可恨),有些想办法先隐藏掉第三方支付(支付宝.微信等),等项目上线了,再跳过内购使用第三 ...
- karma 启动提示PhantomJS not found on PATH
Karma 介绍:是由AngularJS团队开发的测试执行过程管理实用工具,帮助开发人员在不同的浏览器中执行测试. 一般搭配PhantomJS作为浏览器启动器.PhantomJS是一个非主流的Webk ...
- JS: 数组的循环函数
JS 数组相关的循环函数,用得挺多,所以有些坑还是要去踩一下,先来看一道面试题. 注意:下面提到的不改变原数组仅针对基本数据类型. 面试题 模拟实现数组的 map 函数. 心中有答案了吗?我的答案放在 ...