From 24a1783c9f58ffc87d26d20a80ddd59cb1ad2209 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 13 May 2024 17:50:25 +0800 Subject: [PATCH] Get filter property name from `ModelBuilder`. In this way, we can customize the filter property name. --- docs/en/Data-Filtering.md | 4 ++-- docs/zh-Hans/Data-Filtering.md | 4 ++-- .../Volo/Abp/EntityFrameworkCore/AbpDbContext.cs | 10 ++++++---- .../Abp/EntityFrameworkCore/TestMigrationsDbContext.cs | 2 ++ .../TestApp/EntityFrameworkCore/TestAppDbContext.cs | 2 ++ 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/docs/en/Data-Filtering.md b/docs/en/Data-Filtering.md index 830979e710..2618ff183b 100644 --- a/docs/en/Data-Filtering.md +++ b/docs/en/Data-Filtering.md @@ -217,9 +217,9 @@ protected override bool ShouldFilterEntity(IMutableEntityType entityTyp return base.ShouldFilterEntity(entityType); } -protected override Expression> CreateFilterExpression() +protected override Expression> CreateFilterExpression(ModelBuilder modelBuilder) { - var expression = base.CreateFilterExpression(); + var expression = base.CreateFilterExpression(modelBuilder); if (typeof(IIsActive).IsAssignableFrom(typeof(TEntity))) { diff --git a/docs/zh-Hans/Data-Filtering.md b/docs/zh-Hans/Data-Filtering.md index 8a43ad93b1..16793dd908 100644 --- a/docs/zh-Hans/Data-Filtering.md +++ b/docs/zh-Hans/Data-Filtering.md @@ -166,9 +166,9 @@ protected override bool ShouldFilterEntity(IMutableEntityType entityTyp return base.ShouldFilterEntity(entityType); } -protected override Expression> CreateFilterExpression() +protected override Expression> CreateFilterExpression(ModelBuilder modelBuilder) { - var expression = base.CreateFilterExpression(); + var expression = base.CreateFilterExpression(modelBuilder); if (typeof(IIsActive).IsAssignableFrom(typeof(TEntity))) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 638860e742..e0650ee0f5 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -696,7 +696,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, { if (mutableEntityType.BaseType == null && ShouldFilterEntity(mutableEntityType)) { - var filterExpression = CreateFilterExpression(); + var filterExpression = CreateFilterExpression(modelBuilder); if (filterExpression != null) { modelBuilder.Entity().HasAbpQueryFilter(filterExpression); @@ -765,19 +765,21 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, return false; } - protected virtual Expression>? CreateFilterExpression() + protected virtual Expression>? CreateFilterExpression(ModelBuilder modelBuilder) where TEntity : class { Expression>? expression = null; if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity))) { - expression = e => !IsSoftDeleteFilterEnabled || !EF.Property(e, "IsDeleted"); + var softDeleteColumnName = modelBuilder.Entity().Metadata.FindProperty(nameof(ISoftDelete.IsDeleted))?.GetColumnName() ?? "IsDeleted"; + expression = e => !IsSoftDeleteFilterEnabled || !EF.Property(e, softDeleteColumnName); } if (typeof(IMultiTenant).IsAssignableFrom(typeof(TEntity))) { - Expression> multiTenantFilter = e => !IsMultiTenantFilterEnabled || EF.Property(e, "TenantId") == CurrentTenantId; + var multiTenantColumnName = modelBuilder.Entity().Metadata.FindProperty(nameof(IMultiTenant.TenantId))?.GetColumnName() ?? "TenantId"; + Expression> multiTenantFilter = e => !IsMultiTenantFilterEnabled || EF.Property(e, multiTenantColumnName) == CurrentTenantId; expression = expression == null ? multiTenantFilter : QueryFilterExpressionHelper.CombineExpressions(expression, multiTenantFilter); } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs index 225e767d26..c341380338 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs @@ -49,6 +49,8 @@ public class TestMigrationsDbContext : AbpDbContext { b.Property(x => x.LastActiveTime).ValueGeneratedOnAddOrUpdate().HasDefaultValue(DateTime.Now); b.Property(x => x.HasDefaultValue).HasDefaultValue(DateTime.Now); + b.Property(x => x.TenantId).HasColumnName("Tenant_Id"); + b.Property(x => x.IsDeleted).HasColumnName("Is_Deleted"); }); modelBuilder.Entity(b => diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs index e668a21e26..f6cd9eb4da 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs @@ -65,6 +65,8 @@ public class TestAppDbContext : AbpDbContext, IThirdDbContext, { b.Property(x => x.LastActiveTime).ValueGeneratedOnAddOrUpdate().HasDefaultValue(DateTime.Now); b.Property(x => x.HasDefaultValue).HasDefaultValue(DateTime.Now); + b.Property(x => x.TenantId).HasColumnName("Tenant_Id"); + b.Property(x => x.IsDeleted).HasColumnName("Is_Deleted"); }); modelBuilder