飞扬的Blog
主页
登录
EF Core全局筛选器剔除带有IsDelete(软删除)字段的数据
"date"
:
"2020-09-10 13:38:20"
"classfiy"
:
"ef core"
"author"
:
"飞扬"
"viewTimes"
:
225
返回
> 在Context文件内重写OnModelCreating ```CSharp protected override void OnModelCreating(ModelBuilder modelBuilder) { //全局筛选器,剔除IsDeleted=true的记录 var entityTypeList = modelBuilder.Model.GetEntityTypes().Where(x => typeof(ISoftDelete).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); } } ``` ```CSharp public interface ISoftDelete { bool IsDeleted { get; set; } DateTime? DeletionTime { get; set; } } ```