Как создать 2 фильтра (IsDeleted, IsActive) на ядре .net? - PullRequest
0 голосов
/ 17 мая 2019

Когда я использую HasQueryFilter, я не могу отключить один из фильтров В MVC я использовал DynamicFilter, и я выбрал имя для каждого фильтра, и все фильтры будут отключены во время выполнения. Есть ли метод в ядре .net?

        private LambdaExpression SetSoftDeleteQueryFilter(IMutableEntityType entityType)
        {
            var parameter = Expression.Parameter(entityType.ClrType);

            var propertyMethodInfo = typeof(EF).GetMethod("Property").MakeGenericMethod(typeof(bool));
            var isDeletedProperty = Expression.Call(propertyMethodInfo, parameter, Expression.Constant("IsDeleted"));
            var compareExpression = Expression.MakeBinary(ExpressionType.Equal, isDeletedProperty, Expression.Constant(false));
            return Expression.Lambda(compareExpression, parameter);
        }

        private LambdaExpression SetActiveQueryFilter(IMutableEntityType entityType)
        {
            var parameter = Expression.Parameter(entityType.ClrType);

            var propertyMethodInfo = typeof(EF).GetMethod("Property").MakeGenericMethod(typeof(bool));
            var isDeletedProperty = Expression.Call(propertyMethodInfo, parameter, Expression.Constant("IsActive"));
            var compareExpression = Expression.MakeBinary(ExpressionType.Equal, isDeletedProperty, Expression.Constant(true));
            return Expression.Lambda(compareExpression, parameter);
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Price>().HasOne(row => row.Product).WithMany(row => row.Prices).HasForeignKey(row => row.ProductId);

            foreach (var entityType in modelBuilder.Model.GetEntityTypes())
            {
                var lambdaExpression = SetSoftDeleteQueryFilter(entityType);
                modelBuilder.Entity(entityType.ClrType).HasQueryFilter(lambdaExpression);

                lambdaExpression = SetActiveQueryFilter(entityType);
                modelBuilder.Entity(entityType.ClrType).HasQueryFilter(lambdaExpression);
            }
        }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...