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


    我们在类中通常会有一个属性为 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().HasQueryFilter(u => u.IsDel == false);
    }
    

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

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

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

    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时实现全局查询筛选了。

  • 相关阅读:
    SqlServer如何将mdf、ldf文件导入数据库—两种解决方法
    板块概念相关(五)
    EXSI 实用指南 2024 -编译环境 Mac OS 安装篇(一)
    人工智能基础第三次作业
    取数组中每个元素的最高位
    LYVE1抗体丨Relia Tech LYVE1抗体解决方案
    Failed to rollback to checkpoint/savepoint hdfs://mycluster:8020/ck/sapgateway
    Linux 指令心法(十六)`mtd_debug erase` 擦除MTD(Memory Technology Device)设备
    paddle 静态图自定义Python算子
    SAP 自定义表数据导入程序
  • 原文地址:https://www.cnblogs.com/cyfj/p/17810311.html