efcore 批量_EFCore批量实现全局查询筛选器

protected override void OnModelCreating(ModelBuilder modelBuilder)

{

modelBuilder.Entity().Property("_tenantId").HasColumnName("TenantId");

// Configure entity filters

modelBuilder.Entity().HasQueryFilter(b => EF.Property(b, "_tenantId") == _tenantId);

modelBuilder.Entity().HasQueryFilter(p => !p.IsDeleted);

}

官方的做法要一个一个的写,很麻烦。我给大家介绍一种批量实现全局查询筛选器的方法

首先定义一个通用的接口

public interface IAudit

{

public DateTime CreationTime { get; set; }

public DateTime? DeletionTime { get; set; }

public DateTime? LastModificationTime { get; set; }

public bool IsDeleted { get; set; }

}

public class AuditModel : IAudit

{

public DateTime CreationTime { get; set; }

public DateTime? DeletionTime { get; set; }

public DateTime? LastModificationTime { get; set; }

public bool IsDeleted { get; set; }

}

public class Article:AuditModel

{

public int TagId { get; set; }

public string Title { get; set; }

public int Support { get; set; }

public int Comment { get; set; }

public int Visited { get; set; }

public string Digest { get; set; }

public string Url { get; set; }

public Tag Tag { get; set; }

}

然后实现接口,并根据需求继承实现接口的类,这里我让Article类继承。

var entityTypeList = modelBuilder.Model.GetEntityTypes().Where(x => typeof(IAudit).IsAssignableFrom(x.ClrType));

foreach (var entityType in entityTypeList)

{

var parameter = Expression.Parameter(entityType.ClrType);

var propertyMethodInfo = typeof(EF).GetMethod("Property").MakeGenericMethod(typeof(bool));

var isDeletedProperty = Expression.Call(propertyMethodInfo, parameter, Expression.Constant("IsDeleted"));

BinaryExpression compareExpression = Expression.MakeBinary(ExpressionType.Equal, isDeletedProperty, Expression.Constant(false));

var lambdaExpression = Expression.Lambda(compareExpression, parameter);

modelBuilder.Entity(entityType.ClrType).HasQueryFilter(lambdaExpression);

}

这样就可以为所有实现了Iautdit接口的类定义一个全局查询筛选器(我这里是筛选出Isdelete为flase的数据);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值