🐛 Try to fix the soft delete filter didn't work in drive

This commit is contained in:
2025-11-17 23:19:03 +08:00
parent a172128d84
commit 4280168002
5 changed files with 38 additions and 24 deletions

View File

@@ -48,27 +48,33 @@ public class AppDatabase(
base.OnModelCreating(modelBuilder);
// Apply soft-delete filter only to root entities, not derived types
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
var entityTypes = modelBuilder.Model.GetEntityTypes();
foreach (var entityType in entityTypes)
{
if (!typeof(ModelBase).IsAssignableFrom(entityType.ClrType)) continue;
// Skip derived types to avoid filter conflicts
var clrType = entityType.ClrType;
if (clrType.BaseType != typeof(object) &&
if (clrType.BaseType != typeof(ModelBase) &&
typeof(ModelBase).IsAssignableFrom(clrType.BaseType))
{
continue; // Skip derived types
}
var method = typeof(AppDatabase)
.GetMethod(nameof(SetSoftDeleteFilter),
BindingFlags.NonPublic | BindingFlags.Static)!
.MakeGenericMethod(clrType);
method.Invoke(null, [modelBuilder]);
// Apply soft delete filter using cached reflection
ApplySoftDeleteFilter(modelBuilder, clrType);
}
}
private static readonly MethodInfo SetSoftDeleteFilterMethod = typeof(AppDatabase)
.GetMethod(nameof(SetSoftDeleteFilter), BindingFlags.NonPublic | BindingFlags.Static)!;
private static void ApplySoftDeleteFilter(ModelBuilder modelBuilder, Type entityType)
{
var genericMethod = SetSoftDeleteFilterMethod.MakeGenericMethod(entityType);
genericMethod.Invoke(null, [modelBuilder]);
}
private static void SetSoftDeleteFilter<TEntity>(ModelBuilder modelBuilder)
where TEntity : ModelBase
{