如何实现软删除数据查询过滤
实体类继承ISoftDelete接口后,查询获取到的返回结果将不包含已删除的数据。
如何关闭软删除数据过滤
全局方式关闭软删除数据过滤
EntityFrameworkCoreModule模块类中使用。
[DependsOn(typeof(AbpEntityFrameworkCoreMySQLModule))]
public class EntityFrameworkCoreModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpDataFilterOptions>(options => {
options.DefaultStates[typeof(ISoftDelete)] = new DataFilterState(isEnabled:false);
});
}
}
局部方式关闭软删除数据过滤
应用层或仓储层使用。
using (DataFilter.Disable<ISoftDelete>())
{
//查询
}
如何实现自定义数据查询过滤
案例场景:黑名单查询过滤
- 定义过滤器接口
/// <summary>
/// 黑名单过滤器
/// </summary>
public interface IBlackNameFilter
{
public string Name { get; set; }
}
- 实体类实现该过滤器接口
public class News:IBlackNameFilter
{
}
- 重写DbContext中的 ShouldFilterEntity 和 CreateFilterExpression方法
/// <summary>
/// 控制黑名单自定义过滤器是否启用
/// </summary>
protected bool isActiveBlackNameFilterEnabled => DataFilter?.IsEnabled<IBlackNameFilter>() ?? false;
protected override bool ShouldFilterEntity<TEntity>(IMutableEntityType entityType)
{
if (typeof(IBlackNameFilter).IsAssignableFrom(typeof(TEntity)))
{
return true;
}
return base.ShouldFilterEntity<TEntity>(entityType);
}
/// <summary>
/// 定义黑名单自定义过滤器过滤规则
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <returns></returns>
protected override Expression<Func<TEntity, bool>> CreateFilterExpression<TEntity>()
{
var expression = base.CreateFilterExpression<TEntity>();
if (typeof(IBlackNameFilter).IsAssignableFrom(typeof(TEntity)))
{
List<string> filterNames = new List<string> { "傻逼", "贱人" };
//通过实体中的Name字段判断是否是黑名单
Expression<Func<TEntity, bool>> isActiveFilter = e => !isActiveBlackNameFilterEnabled || !filterNames.Contains(EF.Property<string>(e, "Name"));
expression = expression == null ? isActiveFilter : CombineExpressions(expression, isActiveFilter);
}
return expression;
}
如何关闭自定义数据过滤
方式一:此方式执行方法结束后会自动释放变量空间
using var blackNameFilter = DataFilter.Disable<IBlackNameFilter>();
//查询代码
方式二:只在{}内有效
using (DataFilter.Disable<IBlackNameFilter>())
{
//查询代码
}
标签:VNext,黑名单,查询,Abp,过滤,typeof,expression,public
From: https://www.cnblogs.com/mingcore/p/18555317