首页 > 其他分享 >EFCore 使用FluntApi配置 全局查询筛选器

EFCore 使用FluntApi配置 全局查询筛选器

时间:2023-11-05 10:55:38浏览次数:30  
标签:OnModelCreating void 查询 modelBuilder EFCore FluntApi 筛选 public IsDel

我们在类中通常会有一个属性为 IsDel来表示软删除或也称逻辑删除,这个属性会导致我们在进行查询操作时,每一次都要 .where(s=>s.IsDel==false) 非常的麻烦。在使用efCore时可以通过配置查询筛选器来很好的解决这个问题。

public class SysUser
{
    public long Id { get; set; }
    public bool IsDel { get; set; } = false;
    public DateTime CreateTime { get; set; }
}

我们SysUser类中的IsDel属性代表我们的软删除。

我这里自己的DbContext类名叫MyDbContext

public class MyDbContext:DbContext

在MyDbContext中重写OnModelCreating方法来对SysUser类进行配置查询筛选器

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<SysUser>().HasQueryFilter(u => u.IsDel == false);
}

但是由于我们项目中会有很多的实体类所以都写在这里有些臃肿。
我们可以新建EntityBase文件夹或者项目(具体怎么样看个人习惯),我这里就新建了文件夹。
在文件夹中新建类,实现IEntityTypeConfiguration<TEntity>接口,来对实体类进行配置

 public class SysUserEntityConfig : IEntityTypeConfiguration<SysUser>
 {
     public void Configure(EntityTypeBuilder<SysUser> builder)
     {
         builder.HasQueryFilter(u => u.IsDel == false);
     }
 }

然后在OnModelCreating方法中,通过 modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly) 方法从当前类所在的程序集中自动应用所有实现了 IEntityTypeConfiguration<TEntity> 接口的实体配置类。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
}

如果不在同一个程序集,可以使用这种方法

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    var assembly = Assembly.Load("EntityConfigurations(这里要换成自己实际的程序集)");
    modelBuilder.ApplyConfigurationsFromAssembly(assembly);
}

通过这种方式我们就可以在使用efCore时实现全局查询筛选了。

标签:OnModelCreating,void,查询,modelBuilder,EFCore,FluntApi,筛选,public,IsDel
From: https://www.cnblogs.com/cyfj/p/17810311.html

相关文章

  • Asp.Net Core webapi+net6 使用资源筛选器(过滤器) 做缓存
    写一个特性类,用来做标记[AttributeUsage(AttributeTargets.Method)]//只对方法有效publicclassResourceFilterAttribute:Attribute{}我这里使用了MemoryCache来做缓存,也可以使用字典来做,但一定要加上static,否则字典每一次请求都会new一个实例,缓存的东西就丢了private......
  • Python筛选多个Excel中数据缺失程度最少的文件
      本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件内、某一列数据的特征,对其加以筛选,并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法。  首先,我们来明确一下本文的具体需求。现有一个文件夹,其中有大量的Excel表格文件(在......
  • 请求筛选模块被配置为拒绝超过请求内容长度的请求。
    转自:https://blog.csdn.net/cplvfx/article/details/126608987一、打开站点根目录的“web.config ”二、找到“system.webServer”节点三、在“security”节点增加“requestFiltering”节点配置1<system.webServer>2<security>3<req......
  • R : 筛选不含“ ”的行
    setwd("C:\\Users\\Administrator\\Desktop")#加载所需的库library(data.table)#文件路径file_path<-"filtered_file_path_here.tsv"#替换为您的文件路径#从文件中读取数据data<-fread(file_path,sep="\t")#假设列名是"Pathway",筛选......
  • Applescript成功实现imessage数据筛选,imessage蓝号检测,无痕检测手机号是否注册imess
    一、imessages数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写苹果MacOs......
  • EFCore 实体配置方式
    EFCore有两种实体配置方式1、DataAnnotation优点:简单;缺点:耦合[Table("Persons")]publicclassPerson{publicintId{get;set;}[Required][MaxLength(50)]publicstringName{get;set;}}2、FluentAPI(推荐)优点:解耦;缺点:较复杂//实体类......
  • 筛选满足条件的同行与上一行
    问题:筛选出表中满足条件为小于3的同行与上一行解决1:添加辅助列后再筛选辅助列公式:=OR(C2<3,AND(C3<3,C3>0))And函数实现下一行小于3和大于0同意满足Or函数实现下一行设置与同行小于3满足其中任一筛选结果为True的行。函数公式解决:=FILTER(A2:C20,(C2:C20<3)+(C3:C2......
  • 自动启用事务的筛选器
    数据库事务是访问并可能操作各种数据项的一个数据库操i做序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位,事务由事务开始与事务结束之间的执行的全部数据库操作组成;就是我们对数据库中的每个表的增删改查,把这些操作当作全体来执行,只要其中有一项出错,就会把之前......
  • # yyds干货盘点 # Python实现excel工作簿中单元格底色为黄色的数据筛选
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个pandas数据提取的问题,一起来看看吧。大佬们请教个问题有没有什么办法可以实现 excel工作簿中单元格底色为黄色的行筛选出来 当行只要有一个单元格标黄了当行数据筛选出来?二、实现过程这里【......
  • Python实现excel工作簿中单元格底色为黄色的数据筛选
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个pandas数据提取的问题,一起来看看吧。大佬们请教个问题有没有什么办法可以实现 excel工作簿中单元格底色为黄色的行筛选出来 当行只要有一个单元格标黄了当行数据筛选出来?二、实现过程......