EF Core: Soft delete with shadow properties and query filters

后端 未结 5 1039
旧时难觅i
旧时难觅i 2020-12-03 05:47

I\'ve created an interface to try to do a soft delete, mixing shadow properties and query filters. But it\'s not working.

public interface IDeletableEntity {         


        
5条回答
  •  天命终不由人
    2020-12-03 06:13

    I've found a simple solution for my answer ;-). Thanks anyway Ivan Stoev

    The interface is:

    public interface IDeletableEntity
    {
        bool IsDeleted { get; }
    }
    

    And in your model Builder configuration:

    builder.Model.GetEntityTypes()
                           .Where(entityType => typeof(IDeletableEntity).IsAssignableFrom(entityType.ClrType))
                           .ToList()
                           .ForEach(entityType =>
                           {
                               builder.Entity(entityType.ClrType)
                               .HasQueryFilter(ConvertFilterExpression(e => !e.IsDeleted, entityType.ClrType));
                           });
    

    You need to convertfilterExpression

    private static LambdaExpression ConvertFilterExpression(
                                Expression> filterExpression,
                                Type entityType)
                    {
                        var newParam = Expression.Parameter(entityType);
                        var newBody = ReplacingExpressionVisitor.Replace(filterExpression.Parameters.Single(), newParam, filterExpression.Body);
    
                        return Expression.Lambda(newBody, newParam);
                    }
    

提交回复
热议问题