经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » ASP.net » 查看文章
EFCore 使用FluntApi配置 全局查询筛选器
来源:cnblogs  作者:柴油飞机  时间:2023/11/6 9:48:40  对本文有异议

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

  1. public class SysUser
  2. {
  3. public long Id { get; set; }
  4. public bool IsDel { get; set; } = false;
  5. public DateTime CreateTime { get; set; }
  6. }

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

我这里自己的DbContext类名叫MyDbContext

  1. public class MyDbContext:DbContext

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

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

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

  1. public class SysUserEntityConfig : IEntityTypeConfiguration<SysUser>
  2. {
  3. public void Configure(EntityTypeBuilder<SysUser> builder)
  4. {
  5. builder.HasQueryFilter(u => u.IsDel == false);
  6. }
  7. }

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

  1. protected override void OnModelCreating(ModelBuilder modelBuilder)
  2. {
  3. base.OnModelCreating(modelBuilder);
  4. modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
  5. }

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

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

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

原文链接:https://www.cnblogs.com/cyfj/p/17810311.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号