From 1fce1dbd3f3b1e5d02bc7d2b102ef93347b4d5b5 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 4 May 2021 22:05:13 +0800 Subject: [PATCH] Allow customizing EF Core configuration of entity&dbContext of an existing module --- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 6 +- .../Modeling/AbpModelBuilderExtensions.cs | 14 ++++ .../EfCoreObjectExtensionInfoExtensions.cs | 60 +++++++++++++++++ .../EfCoreObjectExtensionManagerExtensions.cs | 67 +++++++++++++++++-- ...ObjectExtensionInfoEfCoreMappingOptions.cs | 39 +++++++++++ .../Domain/TestEntityExtensionConfigurator.cs | 18 ++++- .../EntityFrameworkCore/TestAppDbContext.cs | 7 +- ...tLoggingDbContextModelBuilderExtensions.cs | 6 +- ...undJobsDbContextModelCreatingExtensions.cs | 2 + ...StoringDbContextModelCreatingExtensions.cs | 4 +- ...BloggingDbContextModelBuilderExtensions.cs | 2 + .../CmsKitDbContextModelCreatingExtensions.cs | 6 +- .../DocsDbContextModelBuilderExtensions.cs | 2 + ...agementDbContextModelCreatingExtensions.cs | 2 + ...IdentityDbContextModelBuilderExtensions.cs | 2 + ...yServerDbContextModelCreatingExtensions.cs | 2 + ...nagementDbContextModelBuilderExtensions.cs | 4 +- ...nagementDbContextModelBuilderExtensions.cs | 2 + ...agementDbContextModelCreatingExtensions.cs | 2 + 19 files changed, 232 insertions(+), 15 deletions(-) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs 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 cda8c02416..29c88194f6 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -31,11 +31,13 @@ using Volo.Abp.Uow; namespace Volo.Abp.EntityFrameworkCore { - public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, ITransientDependency + public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, ITransientDependency, IHasExtraProperties where TDbContext : DbContext { public IAbpLazyServiceProvider LazyServiceProvider { get; set; } + public ExtraPropertyDictionary ExtraProperties { get; } + protected virtual Guid? CurrentTenantId => CurrentTenant?.Id; protected virtual bool IsMultiTenantFilterEnabled => DataFilter?.IsEnabled() ?? false; @@ -86,7 +88,7 @@ namespace Volo.Abp.EntityFrameworkCore protected AbpDbContext(DbContextOptions options) : base(options) { - + ExtraProperties = new ExtraPropertyDictionary(); } protected override void OnModelCreating(ModelBuilder modelBuilder) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderExtensions.cs new file mode 100644 index 0000000000..5af3fd44db --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderExtensions.cs @@ -0,0 +1,14 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.ObjectExtending; + +namespace Volo.Abp.EntityFrameworkCore.Modeling +{ + public static class AbpModelBuilderExtensions + { + public static void TryConfigureObjectExtensions(this ModelBuilder modelBuilder) + where TDbContext : DbContext + { + ObjectExtensionManager.Instance.ConfigureEfCoreDbContext(modelBuilder); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionInfoExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionInfoExtensions.cs index 17b495cdad..580e29b920 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionInfoExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionInfoExtensions.cs @@ -1,11 +1,15 @@ using System; using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace Volo.Abp.ObjectExtending { public static class EfCoreObjectExtensionInfoExtensions { + public const string EfCoreDbContextConfigurationName = "EfCoreDbContextMapping"; + public const string EfCoreEntityConfigurationName = "EfCoreEntityMapping"; + [Obsolete("Use MapEfCoreProperty with EntityTypeAndPropertyBuildAction parameters.")] public static ObjectExtensionInfo MapEfCoreProperty( [NotNull] this ObjectExtensionInfo objectExtensionInfo, @@ -71,5 +75,61 @@ namespace Volo.Abp.ObjectExtending } ); } + + public static ObjectExtensionInfo MapEfCoreEntity( + [NotNull] this ObjectExtensionInfo objectExtensionInfo, + [NotNull] Action entityTypeBuildAction) + { + Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo)); + + objectExtensionInfo.Configuration[EfCoreEntityConfigurationName] = + new ObjectExtensionInfoEfCoreMappingOptions( + objectExtensionInfo, + entityTypeBuildAction); + + return objectExtensionInfo; + } + + public static ObjectExtensionInfo MapEfCoreDbContext( + [NotNull] this ObjectExtensionInfo objectExtensionInfo, + [NotNull] Action modelBuildAction) + { + Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo)); + + objectExtensionInfo.Configuration[EfCoreDbContextConfigurationName] = + new ObjectExtensionInfoEfCoreMappingOptions( + objectExtensionInfo, + modelBuildAction); + + return objectExtensionInfo; + } + + [CanBeNull] + public static ObjectExtensionInfoEfCoreMappingOptions GetEfCoreEntityMappingOrNull( + [NotNull] this ObjectExtensionInfo objectExtensionInfo) + { + Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo)); + + if (!objectExtensionInfo.Configuration.TryGetValue(EfCoreEntityConfigurationName, out var options)) + { + return null; + } + + return options as ObjectExtensionInfoEfCoreMappingOptions; + } + + [CanBeNull] + public static ObjectExtensionInfoEfCoreMappingOptions GetEfCoreDbContextMappingOrNull( + [NotNull] this ObjectExtensionInfo objectExtensionInfo) + { + Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo)); + + if (!objectExtensionInfo.Configuration.TryGetValue(EfCoreDbContextConfigurationName, out var options)) + { + return null; + } + + return options as ObjectExtensionInfoEfCoreMappingOptions; + } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs index 54c1909bb3..67a0d1d971 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using Volo.Abp.Data; using Volo.Abp.Domain.Entities; @@ -8,6 +9,45 @@ namespace Volo.Abp.ObjectExtending { public static class EfCoreObjectExtensionManagerExtensions { + public static ObjectExtensionManager MapEfCoreDbContext( + [NotNull] this ObjectExtensionManager objectExtensionManager, + [NotNull] Action modelBuilderAction) + where TDbContext: DbContext + { + return objectExtensionManager.AddOrUpdate( + typeof(TDbContext), + options => + { + options.MapEfCoreDbContext(modelBuilderAction); + }); + } + + public static ObjectExtensionManager MapEfCoreEntity( + [NotNull] this ObjectExtensionManager objectExtensionManager, + [NotNull] Action entityTypeBuildAction) + where TEntity : IEntity + { + return MapEfCoreEntity( + objectExtensionManager, + typeof(TEntity), + entityTypeBuildAction); + } + + public static ObjectExtensionManager MapEfCoreEntity( + [NotNull] this ObjectExtensionManager objectExtensionManager, + [NotNull] Type entityType, + [NotNull] Action entityTypeBuildAction) + { + Check.NotNull(objectExtensionManager, nameof(objectExtensionManager)); + + return objectExtensionManager.AddOrUpdate( + entityType, + options => + { + options.MapEfCoreEntity(entityTypeBuildAction); + }); + } + public static ObjectExtensionManager MapEfCoreProperty( [NotNull] this ObjectExtensionManager objectExtensionManager, [NotNull] string propertyName) @@ -32,10 +72,7 @@ namespace Volo.Abp.ObjectExtending entityType, propertyType, propertyName, - options => - { - options.MapEfCore(); - } + options => { options.MapEfCore(); } ); } @@ -126,6 +163,9 @@ namespace Volo.Abp.ObjectExtending return; } + var efCoreEntityMapping = objectExtension.GetEfCoreEntityMappingOrNull(); + efCoreEntityMapping?.EntityTypeBuildAction?.Invoke(typeBuilder); + foreach (var property in objectExtension.GetProperties()) { var efCoreMapping = property.GetEfCoreMappingOrNull(); @@ -148,5 +188,24 @@ namespace Volo.Abp.ObjectExtending #pragma warning restore 618 } } + + public static void ConfigureEfCoreDbContext( + [NotNull] this ObjectExtensionManager objectExtensionManager, + [NotNull] ModelBuilder modelBuilder) + where TDbContext : DbContext + { + Check.NotNull(objectExtensionManager, nameof(objectExtensionManager)); + Check.NotNull(modelBuilder, nameof(modelBuilder)); + + var objectExtension = objectExtensionManager.GetOrNull(typeof(TDbContext)); + if (objectExtension == null) + { + return; + } + + var efCoreDbContextMapping = objectExtension.GetEfCoreDbContextMappingOrNull(); + + efCoreDbContextMapping?.ModelBuildAction?.Invoke(modelBuilder); + } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs new file mode 100644 index 0000000000..5510e138e4 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs @@ -0,0 +1,39 @@ +using System; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Volo.Abp.ObjectExtending +{ + public class ObjectExtensionInfoEfCoreMappingOptions + { + [NotNull] + public ObjectExtensionInfo ObjectExtension { get; } + + [CanBeNull] + public Action EntityTypeBuildAction { get; set; } + + [CanBeNull] + public Action ModelBuildAction { get; set; } + + public ObjectExtensionInfoEfCoreMappingOptions( + [NotNull] ObjectExtensionInfo objectExtension, + [NotNull] Action entityTypeBuildAction) + { + ObjectExtension = Check.NotNull(objectExtension, nameof(objectExtension)); + EntityTypeBuildAction = Check.NotNull(entityTypeBuildAction, nameof(entityTypeBuildAction)); + + EntityTypeBuildAction = entityTypeBuildAction; + } + + public ObjectExtensionInfoEfCoreMappingOptions( + [NotNull] ObjectExtensionInfo objectExtension, + [NotNull] Action modelBuildAction) + { + ObjectExtension = Check.NotNull(objectExtension, nameof(objectExtension)); + ModelBuildAction = Check.NotNull(modelBuildAction, nameof(modelBuildAction)); + + ModelBuildAction = modelBuildAction; + } + } +} diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/TestEntityExtensionConfigurator.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/TestEntityExtensionConfigurator.cs index 469dfbdfd4..f2618966b8 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/TestEntityExtensionConfigurator.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/TestEntityExtensionConfigurator.cs @@ -1,6 +1,8 @@ using System; +using Microsoft.EntityFrameworkCore.Metadata.Builders; using Volo.Abp.ObjectExtending; using Volo.Abp.TestApp.Domain; +using Volo.Abp.TestApp.EntityFrameworkCore; using Volo.Abp.Threading; namespace Volo.Abp.EntityFrameworkCore.Domain @@ -35,7 +37,21 @@ namespace Volo.Abp.EntityFrameworkCore.Domain "EnumNumberString" ).MapEfCoreProperty( "EnumLiteral" - ); + ).MapEfCoreEntity(b => + { + b.As>() + .Property(x=>x.Name).IsRequired().HasMaxLength(200); + + }).MapEfCoreEntity(typeof(Person), b => + { + b.As>() + .HasIndex(x=>x.Birthday); + }); + + ObjectExtensionManager.Instance.MapEfCoreDbContext(b => + { + b.Entity().Property(x => x.Name).IsRequired(); + }); }); } } 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 da8bbc8a6c..4d4f078839 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 @@ -1,5 +1,6 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.Modeling; using Volo.Abp.EntityFrameworkCore.TestApp.ThirdDbContext; using Volo.Abp.TestApp.Domain; @@ -16,10 +17,10 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore public DbSet DummyEntities { get; set; } public DbSet EntityWithIntPks { get; set; } - + public DbSet Author { get; set; } - public TestAppDbContext(DbContextOptions options) + public TestAppDbContext(DbContextOptions options) : base(options) { @@ -31,6 +32,8 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore base.OnModelCreating(modelBuilder); + modelBuilder.TryConfigureObjectExtensions(); + modelBuilder.Entity(b => { b.HasKey(p => new {p.PersonId, p.Number}); diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs index b44242e511..261c378fd9 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs @@ -39,7 +39,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore if (builder.IsUsingOracle()) { AuditLogConsts.MaxExceptionsLengthValue = 2000; } b.Property(x => x.Exceptions).HasMaxLength(AuditLogConsts.MaxExceptionsLengthValue).HasColumnName(nameof(AuditLog.Exceptions)); - + b.Property(x => x.Comments).HasMaxLength(AuditLogConsts.MaxCommentsLength).HasColumnName(nameof(AuditLog.Comments)); b.Property(x => x.ExecutionDuration).HasColumnName(nameof(AuditLog.ExecutionDuration)); b.Property(x => x.ImpersonatorTenantId).HasColumnName(nameof(AuditLog.ImpersonatorTenantId)); @@ -67,7 +67,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore b.Property(x => x.Parameters).HasMaxLength(AuditLogActionConsts.MaxParametersLength).HasColumnName(nameof(AuditLogAction.Parameters)); b.Property(x => x.ExecutionTime).HasColumnName(nameof(AuditLogAction.ExecutionTime)); b.Property(x => x.ExecutionDuration).HasColumnName(nameof(AuditLogAction.ExecutionDuration)); - + b.HasIndex(x => new { x.AuditLogId }); b.HasIndex(x => new { x.TenantId, x.ServiceName, x.MethodName, x.ExecutionTime }); }); @@ -104,6 +104,8 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore b.HasIndex(x => new { x.EntityChangeId }); }); + + builder.TryConfigureObjectExtensions(); } } } diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/BackgroundJobsDbContextModelCreatingExtensions.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/BackgroundJobsDbContextModelCreatingExtensions.cs index 0e36a661f6..b6f5437836 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/BackgroundJobsDbContextModelCreatingExtensions.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/BackgroundJobsDbContextModelCreatingExtensions.cs @@ -40,6 +40,8 @@ namespace Volo.Abp.BackgroundJobs.EntityFrameworkCore b.HasIndex(x => new { x.IsAbandoned, x.NextTryTime }); }); + + builder.TryConfigureObjectExtensions(); } } } diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDbContextModelCreatingExtensions.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDbContextModelCreatingExtensions.cs index be8625e9e6..6c92ddb7b1 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDbContextModelCreatingExtensions.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDbContextModelCreatingExtensions.cs @@ -46,6 +46,8 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore b.HasIndex(x => new {x.TenantId, x.ContainerId, x.Name}); }); + + builder.TryConfigureObjectExtensions(); } } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContextModelBuilderExtensions.cs b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContextModelBuilderExtensions.cs index 9c54d0a3a0..ee81343725 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContextModelBuilderExtensions.cs +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContextModelBuilderExtensions.cs @@ -107,6 +107,8 @@ namespace Volo.Blogging.EntityFrameworkCore b.HasKey(x => new { x.PostId, x.TagId }); }); + + builder.TryConfigureObjectExtensions(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index 284d4b0e33..accb4433c6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -194,7 +194,7 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(p => p.Slug).IsRequired().HasMaxLength(BlogPostConsts.MaxSlugLength); b.Property(p => p.ShortDescription).HasMaxLength(BlogPostConsts.MaxShortDescriptionLength); b.Property(p => p.Content).HasMaxLength(BlogPostConsts.MaxContentLength); - + b.HasIndex(x => new { x.Slug, x.BlogId }); }); @@ -232,6 +232,8 @@ namespace Volo.CmsKit.EntityFrameworkCore { builder.Ignore(); } + + builder.TryConfigureObjectExtensions(); } } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs index c751475728..bec8c00414 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs @@ -72,6 +72,8 @@ namespace Volo.Docs.EntityFrameworkCore b.HasKey(x => new { x.DocumentId, x.Username }); }); + + builder.TryConfigureObjectExtensions(); } } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/FeatureManagementDbContextModelCreatingExtensions.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/FeatureManagementDbContextModelCreatingExtensions.cs index 0398096b95..6bbc453d33 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/FeatureManagementDbContextModelCreatingExtensions.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/FeatureManagementDbContextModelCreatingExtensions.cs @@ -37,6 +37,8 @@ namespace Volo.Abp.FeatureManagement.EntityFrameworkCore b.HasIndex(x => new { x.Name, x.ProviderName, x.ProviderKey }); }); + + builder.TryConfigureObjectExtensions(); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs index 4e43721a80..4195266af7 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs @@ -253,6 +253,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore }).IsUnique(); }); } + + builder.TryConfigureObjectExtensions(); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs index d3d08dca15..528919cd1b 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs @@ -419,6 +419,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore }); #endregion + + builder.TryConfigureObjectExtensions(); } private static bool IsDatabaseProvider( diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/AbpPermissionManagementDbContextModelBuilderExtensions.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/AbpPermissionManagementDbContextModelBuilderExtensions.cs index 419389568a..4f710151fd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/AbpPermissionManagementDbContextModelBuilderExtensions.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/AbpPermissionManagementDbContextModelBuilderExtensions.cs @@ -32,6 +32,8 @@ namespace Volo.Abp.PermissionManagement.EntityFrameworkCore b.HasIndex(x => new {x.Name, x.ProviderName, x.ProviderKey}); }); + + builder.TryConfigureObjectExtensions(); } } -} \ No newline at end of file +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/SettingManagementDbContextModelBuilderExtensions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/SettingManagementDbContextModelBuilderExtensions.cs index 0758cc9957..a3b657009a 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/SettingManagementDbContextModelBuilderExtensions.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/SettingManagementDbContextModelBuilderExtensions.cs @@ -55,6 +55,8 @@ namespace Volo.Abp.SettingManagement.EntityFrameworkCore b.HasIndex(x => new {x.Name, x.ProviderName, x.ProviderKey}); }); + + builder.TryConfigureObjectExtensions(); } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementDbContextModelCreatingExtensions.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementDbContextModelCreatingExtensions.cs index 04c97046cf..4708ae8e30 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementDbContextModelCreatingExtensions.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementDbContextModelCreatingExtensions.cs @@ -49,6 +49,8 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore b.Property(cs => cs.Name).IsRequired().HasMaxLength(TenantConnectionStringConsts.MaxNameLength); b.Property(cs => cs.Value).IsRequired().HasMaxLength(TenantConnectionStringConsts.MaxValueLength); }); + + builder.TryConfigureObjectExtensions(); } } }