|
|
|
@ -696,7 +696,7 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext, |
|
|
|
{ |
|
|
|
if (mutableEntityType.BaseType == null && ShouldFilterEntity<TEntity>(mutableEntityType)) |
|
|
|
{ |
|
|
|
var filterExpression = CreateFilterExpression<TEntity>(); |
|
|
|
var filterExpression = CreateFilterExpression<TEntity>(modelBuilder); |
|
|
|
if (filterExpression != null) |
|
|
|
{ |
|
|
|
modelBuilder.Entity<TEntity>().HasAbpQueryFilter(filterExpression); |
|
|
|
@ -765,19 +765,21 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext, |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
protected virtual Expression<Func<TEntity, bool>>? CreateFilterExpression<TEntity>() |
|
|
|
protected virtual Expression<Func<TEntity, bool>>? CreateFilterExpression<TEntity>(ModelBuilder modelBuilder) |
|
|
|
where TEntity : class |
|
|
|
{ |
|
|
|
Expression<Func<TEntity, bool>>? expression = null; |
|
|
|
|
|
|
|
if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity))) |
|
|
|
{ |
|
|
|
expression = e => !IsSoftDeleteFilterEnabled || !EF.Property<bool>(e, "IsDeleted"); |
|
|
|
var softDeleteColumnName = modelBuilder.Entity<TEntity>().Metadata.FindProperty(nameof(ISoftDelete.IsDeleted))?.GetColumnName() ?? "IsDeleted"; |
|
|
|
expression = e => !IsSoftDeleteFilterEnabled || !EF.Property<bool>(e, softDeleteColumnName); |
|
|
|
} |
|
|
|
|
|
|
|
if (typeof(IMultiTenant).IsAssignableFrom(typeof(TEntity))) |
|
|
|
{ |
|
|
|
Expression<Func<TEntity, bool>> multiTenantFilter = e => !IsMultiTenantFilterEnabled || EF.Property<Guid>(e, "TenantId") == CurrentTenantId; |
|
|
|
var multiTenantColumnName = modelBuilder.Entity<TEntity>().Metadata.FindProperty(nameof(IMultiTenant.TenantId))?.GetColumnName() ?? "TenantId"; |
|
|
|
Expression<Func<TEntity, bool>> multiTenantFilter = e => !IsMultiTenantFilterEnabled || EF.Property<Guid>(e, multiTenantColumnName) == CurrentTenantId; |
|
|
|
expression = expression == null ? multiTenantFilter : QueryFilterExpressionHelper.CombineExpressions(expression, multiTenantFilter); |
|
|
|
} |
|
|
|
|
|
|
|
|