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范式作为 ...
随机推荐
- 9.json和jsonpath
数据提取之JSON与JsonPATH JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适 ...
- linux下git远程仓库的搭建
一.服务器环境 ubuntukylin-16.04-server-amd64 二.远程服务器创建一个名字叫git的用户,专门用于管理git仓库. $ adduser git 三.安装git.服务器端和 ...
- 搭建ELK集群
环境准备 基础环境介绍 操作系统 部署应用 应用版本号 IP地址 主机名 CentOS 7.4 Elasticsearch/Logstash 6.4.3 192.168.1.1 elk1 CentOS ...
- WPF 右上角带数字的按钮
效果如图所示 三种方案, 1:不改控件模版,布局实现,死开 2:改button模版,利用附加属性,附加附加属性,功能多了话,不利于拓展 3:继承button,添加依赖属性,接下来是这种 1:新建类 为 ...
- nodejs学习(imooc课程笔记, 主讲人Scott)
课程地址: 进击Node.js基础(一) 进击Node.js基础(二) 1. nodejs创建服务器 var http = require('http'); //加载http模块 //请求进来时, 告 ...
- 《Python黑帽子:黑客与渗透测试编程之道》 玩转浏览器
基于浏览器的中间人攻击: #coding=utf-8 import win32com.client import time import urlparse import urllib data_rec ...
- spring boot实现异步调用
今天在这里学习下使用springboot的异步调用async 首先使用@EnableAsync开启异步功能 /** * @author fengzp * @date 17/5/8 * @email f ...
- MySQL 中文字符集排序
SELECT 字段名 FROM 表 ORDER BY CONVERT(字段名 USING gbk) ASC;
- python中的三次握手以及四次挥手
三次握手1.客户端对服务端说:我的序号是x,我要向你请求连接:(第一次握手,发送SYN包,然后进入SYN-SEND状态)2.服务端听到之后对客户端说:我的序号是y,期待你下一句序号是x+1的话(意思就 ...
- eclipse安装STS遇到的问题
eclipse安装STS时,在eclipse marketplase中搜索STS没有结果,从官网下载STS包,然后安装提示找不到JAR包, 解决方式: eclipse需要和STS包版本一致,如果STS ...