Files
2026-05-09 17:06:30 +08:00

29 lines
1.0 KiB
C#

using IM.DomainCommons;
using Microsoft.EntityFrameworkCore;
using System.Linq.Expressions;
namespace IM.Infrastructure.Efcore
{
public static class EfcoreExtension
{
public static void EnableSoftDeletionGlobalFilter(this ModelBuilder modelBuilder)
{
var entityTypesHasSoftDeletion = modelBuilder.Model.GetEntityTypes()
.Where(e => e.ClrType.IsAssignableTo(typeof(ISoftDelete)));
foreach (var entityType in entityTypesHasSoftDeletion)
{
var isDeletedProperty = entityType.FindProperty(nameof(ISoftDelete.IsDeleted));
var parameter = Expression.Parameter(entityType.ClrType, "p");
var filter = Expression.Lambda(Expression.Not(Expression.Property(parameter, isDeletedProperty.PropertyInfo)), parameter);
entityType.SetQueryFilter(filter);
}
}
public static IQueryable<T> Query<T>(this DbContext context) where T : class
{
return context.Set<T>().AsNoTracking();
}
}
}