EF Core: Soft delete with shadow properties and query filters

后端 未结 5 1029
旧时难觅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:19

    That does not work for me, .net core 3.1, so I tried the following approach which is kinda similar :

    // fetch entity types by reflection then: 
    
     softDeletedEntityTypes.ForEach(entityType =>
                {
                    modelBuilder.Entity(entityType, builder =>
                    {
                        builder.Property("IsDeleted");
                        builder.HasQueryFilter(GenerateQueryFilterExpression(entityType));
                    });
                });
    
    
     private static LambdaExpression GenerateQueryFilterExpression(Type entityType)
            {            
                 // the following lambda expression should be generated
                 // e => !EF.Property(e, "IsDeleted")); 
    
                var parameter = Expression.Parameter(entityType, "e"); // e =>
    
                var fieldName = Expression.Constant("IsDeleted", typeof(string)); // "IsDeleted"
    
                // EF.Property(e, "IsDeleted")
                var genericMethodCall = Expression.Call(typeof(EF), "Property", new[] {typeof(bool)}, parameter, fieldName);
    
                // !EF.Property(e, "IsDeleted"))
                var not = Expression.Not(genericMethodCall);
    
                // e => !EF.Property(e, "IsDeleted"));
                var lambda = Expression.Lambda(not, parameter);
            }
    
    

提交回复
热议问题