tnblog
首页
视频
资源
登录

ABP 数据库 -- ABP&EF中的多表、关联查询 GetAllIncluding方法

8669人阅读 2022/3/30 17:21 总访问:1405017 评论:0 收藏:0 手机
分类: 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的数据如下:

image

Student的数据如下:

image

可以看到,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

原文:https://www.cnblogs.com/alunchen/p/6835297.html

评价
没有个性,不需要签名
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术