首页 > 其他分享 >ABP-数据过滤器(Fliter)

ABP-数据过滤器(Fliter)

时间:2023-09-07 11:45:59浏览次数:36  
标签:PersonFilter personId 禁用 ABP Fliter 参数 过滤器 using

过滤器文档地址

ABP预定义过滤器

过滤器禁用

对于默认启动的过滤器,可以使用using语句临时禁用,也可全局禁用

using语句临时禁用软删除过滤

using (CurrentUnitOfWork.DisableAuditing(AbpDataFilters.SoftDelete))
{
  var list=_approvaloperaterecordsRepository.GetAll();
}
using (_unitOfWorkManager.Current.DisableAuditing(AbpDataFilters.SoftDelete))
{
  var list=_approvaloperaterecordsRepository.GetAll();
}

注:您可以注入 IUnitOfWorkManager 并像示例中一样使用它,如果您的类 继承一些特殊的基类(如应用程序服务、 AbpController, AbpApiController...)也可以使用示例中快捷方式CurrentUnitOfWork 。

全局禁用过滤器

可以在模块的PreInitialize方法中配置如下内容全局禁用

Configuration.UnitOfWork.OverrideFilter(AbpDataFilters.SoftDelete, false);

过滤器参数设置

带参过滤器还可重新设置参数,如下 IMayHaveTenant 设置 tenantId 值的示例

 CurrentUnitOfWork.SetFilterParameter(AbpDataFilters.MayHaveTenant, AbpDataFilters.Parameters.TenantId, 42);

 

自定义数据过滤器

1.定义接口

public interface IHasPerson
{
  int PersonId { get; set; }
}

2.让需要该数据过滤的实体继承接口

public class Phone : Entity, IHasPerson
{
        [ForeignKey("PersonId")]
        public virtual Person Person { get; set; }
        public virtual int PersonId { get; set; }
        public virtual string Number { get; set; }
 }

3.在我们的 DbContext 类中,我们 覆盖 OnModel创建并定义筛选器

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Filter("PersonFilter", (IHasPerson entity, int personId) => entity.PersonId == personId, 0);//“PersonFilter”过滤器名称,名字唯一
}

“PersonFilter”是此处筛选器的唯一名称。第二个参数定义了过滤器接口和personId过滤器参数(如果过滤器不是参数化的,则不需要)。最后一个参数是personId的默认值。

 

4.最后,我们必须在模块的PreInitialize方法中将此筛选器注册到ASP.NET Boilerplate的工作单元系统中

 Configuration.UnitOfWork.RegisterFilter("PersonFilter", false);

第一个参数与我们之前定义的唯一名称相同。第二个参数指示默认情况下是启用还是禁用此筛选器。在声明了这样一个参数过滤器之后,我们可以通过在运行时提供它的值来使用它。

5.使用

using (CurrentUnitOfWork.EnableFilter("PersonFilter"))//临时启用“PersonFilter”
{
        using(CurrentUnitOfWork.SetFilterParameter("PersonFilter", "personId", 42))//设置"PersonFilter"的参数“personId”参数设置值
        {
            var phones = _phoneRepository.GetAllList();
            //...
        }
}

我们可以从某些来源获取personId,而不是静态编码。上面的例子是针对参数过滤器的。一个过滤器可以有零个或多个参数。如果它没有参数,则不需要设置过滤器参数值。此外,如果默认情况下已启用,则无需手动启用(您可以始终禁用此功能)。

 

标签:PersonFilter,personId,禁用,ABP,Fliter,参数,过滤器,using
From: https://www.cnblogs.com/sugarwxx/p/17684036.html

相关文章

  • .Net Core全局异常过滤器
    一、什么是异常过滤器    在我们的项目运行中,当程序出现异常的时候就会弹窗大黄页,所以为了更方便的解决这个问题,我们采用全局过滤器 ExceptionFilterAttribute 。通过它主动捕获程序中的异常,然后经过处理再抛出信息。 二、使用异常过滤器   1.创建一个异常类 ......
  • .NetCore——全局异常过滤器ExceptionFilterAttribute
    .NetCore——全局异常过滤器ExceptionFilterAttribute一、介绍在我们的项目运行中,当程序出现异常的时候就会弹窗大黄页,所以为了更方便的解决这个问题,我们采用全局过滤器ExceptionFilterAttribute。通过它主动捕获程序中的异常,然后经过处理再抛出信息。下面咱们直接上干货,撸起来......
  • ABP框架-介绍
    什么是ABPABP(ASP.NETBoilerplate)是一个开源的应用程序框架,以帮助开发人员快速开发。但它又不仅仅是一个框架,更提供了一套基于DDD的架构模型和最佳实践。下面我们来研究一个最简单的示例来看看使用ABP有哪些好处publicclassTaskAppService:ApplicationService,ITaskApp......
  • jquery 过滤器~查找方法
    过滤方法,指的是对所选元素进一步地筛选。查找方法,主要是以当前所选元素为基点,找到这个元素的父元素、子元素或兄弟元素。在jQuery中,对于查找方法,我们可以分为以下3种情况。(1)查找祖先元素。(2)查找后代元素。(3)查找兄弟元素。1.查找祖先元素在jQuery中,如果想要查找当前元素的......
  • js 过滤器~过滤方法
    在之前的学习中,我们接触了大量的选择器,包括基本选择器、伪类选择器等。为了更加方便快速地操作元素,除了选择器之外,jQuery还为我们提供了以“方法”(类似于函数方法)形式存在的两种方式:过滤方法和查找方法。过滤方法和查找方法跟之前学习的选择器之间是互补关系,它们补充了很多使用选......
  • 路由的过滤器设置
             ......
  • 过滤器| 拦截器| 监听器的区别与使用
    骑士李四记录:1.过滤器(Filter):过滤器依赖于servlet容器。在实现上基于函数回调。几乎可以对所有请求进行过滤。缺点是一个过滤器实例只能在容器初始化时调用一次。2.拦截器(Interceptor)拦截器依赖于web框架,在SpringMVC中依赖于SpringMVC框架。实现上基于java反射机制,属于面向切......
  • ABP Framework 7.4 RC 新增功能简介:增强微服务架构支持
    ABPFramework版本号:7.4.0-rc.1发布时间:2023.8.16阅读原文:ABP.IOPlatform7.4RCHasBeenPublished翻译:iEricLee原文首发:知识乐ABPFramework专题该版本中发布的主要特性:设置系统支持动态存储新增AdditionalAssemblyAttribute特性分布式事件支持关联ID(Corr......
  • abp-vnext-pro 实战(九,前端vue和vben学习)
    vben效果 VbenAdmin(vvbin.cn) 对应的代码在 vue-vben-admin/src/views/demo/page/form/basic/data.tsatmain·vbenjs/vue-vben-admin(github.com){field:'time',component:'RangePicker',label:'起止日期',colProps:{......
  • ABP Sqlite 级联删除、ABP EF Sqlite级联删除
    前言:  为实现在ABP中实现级联删除。  以前参照过ABP工作单元实现过一套符合公司业务要求的工作单元。1.如何实现ABPEFSqlite级联删除?  参考链接地址https://stackoverflow.com/questions/5890250/on-delete-cascade-in-sqlite3  sqlite默认是没有启用外键的,需......