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

时间: 2024-08-30 02:52:18

ABP 数据库 -- ABP&EF中的多表、关联查询的相关文章

EF模式下 多表关联查询结果作为数据源 gridview无法编辑的问题解决思路

之前做项目都习惯了使用SQL方便又快捷,但是近期领导要求使用对象实体的方式进行程序的开发 比较了多个ORM框架之后 决定还是采用微软自家的EF吧 .初次使用EF,没有什么经验 ,在实际使用过程中 遇到了一些问题,也折腾了好长时间... 前天在开发某个功能的时候 一个小兄弟 就发现 采用EF模式 在多表关联查询的结果作为数据源的情况下 gridview可以正常的显示 但是无法进行编辑,各种属性也都没问题,这可怎么办?百度之,有人说这是因为EF下gridview编辑都是依托于实体类的 ,多表关联的结

Mysql中实现多表关联查询更新操作

今天一下要记录一下才行了,每次都要去网上查找方法,每次都难找得要命 Mysql在更新某些字段的数据时,有时候会依据其他表的数据进行更新,需要通过关联后对不同的行更新不同的值,传统的update set没法实现,可以用下面的方法来实现 UPDATE `widetable_solr_field` a INNER JOIN `widetable_field_increat` b SET a.`compose` = b.`udf` WHERE a.`fname` = CONCAT('t',b.`tabl

数据库MySQL中关于“多表关联更新”的那些事

在常见的sql中,我们经常在查询中进行多表关联查询,用的比较熟练.今天在开发中遇到一个实际业务场景是多表关联更新,一时不知所措.本着多学习的态度,没有直接写java代码去实现,终于把多表关联更新的sql弄清楚了.下面将实际业务场景进行简化,分别有person表和information表,最终目的是将 information表中的年龄更新到person表中的每个人的年龄.分别写了几个sql demo来把多表更新的知识理解透彻. 首先,在更新前,person表和information表分别如下: i

利用mysql和mysqli取得mysql的所有数据库和库中的所有表

功能:利用mysql和mysqli两种连接数据库的方法,取得Mysql服务器上的所有数据库和库中的所有表. 环境:自己用分开安装apache mysql php搭建的环境 操作系统是:windows 10 代码如下: <?php/** * mysqli  op mysql demo *//** * 公用函数 */ /** * 功能:列出一个数据库的所有表 * @param $dbname * @param $con */function list_tables($dbname,$con)    

RDIFramework.NET 中多表关联查询分页实例

RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为指导思想,作为异质系统整合与互操作性.分布式应用提供了可行的解决方案. 分页非常的常见,基本任何项目都会涉及到分页,这没什么好谈的,大多数我们分页对单表的分页比较多,对多表的分页我们可以通过视图来实现,当然还有其他的方式,在这儿,我以一个实例展示下使用我们的RDIFramework.NET来实现多表

Yii2中多表关联查询(join、joinwith) with是不执行sql的

Yii2中多表关联查询(join.joinwith) 我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name customer_id book_id) 图书表 (id book_name author_id) 作者表 (id author_name) 模型定义 下面是这4个个模型的定义,只写出其中的关联 Customer class Customer extends \

Yii2中多表关联查询(join、joinwith)

我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_name       customer_id   book_id) 图书表                    (id  book_name       author_id) 作者表                    (id  author_name) 模型定义 下面是这4个个模型的定义,只写

Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询

在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以及MyBatis的分页问题. 首先先看看项目的架构,方便后边叙述. 这个项目中是一个Sping+MyBatis的完整demo(这边将页面没有展示.)这次的主题主要是后台数据处理逻辑.接下来为大家逐一介绍各个文件, org.config   Spring配置包括数据库的链接信息 org.control

Oracle 数据库(oracle Database)Select 多表关联查询方式

Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名2>[,…] [WHERE <筛选择条件表达式>] [GROUP BY <分组表达式> [HAVING<分组条件表达式>]] [ORDER BY <字段>[ASC | DESC]] 语句说明: []方括号为可选项 [GROUP BY <分组表达式&g

Yii AR中处理多表关联的relations配置

关系型 Active Record官方文档中指出: 两张表之间的关联是根据外键来的,但是这种外键关联虽然在数据容错方面有益处,但是在性能上是个损伤,所以,一般是不定义外键的. 这种情况下,他们之间的关联又会根据什么来呢? 有A,B两张表,在A与B表中都存在一个字段filedX,并且同时字段filedX也是A,B的关联字段,这种情况下,可以直接 public function relations() { // NOTE: you may need to adjust the relation na