From 1fce1dbd3f3b1e5d02bc7d2b102ef93347b4d5b5 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 4 May 2021 22:05:13 +0800 Subject: [PATCH 1/8] 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(); } } } From dc40ac24e4f670946c9568b35a90c2b7037cb8d6 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 5 May 2021 17:30:51 +0800 Subject: [PATCH 2/8] Rename AbpModelBuilderExtensions to AbpModelBuilderObjectExtensions --- ...lBuilderExtensions.cs => AbpModelBuilderObjectExtensions.cs} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/{AbpModelBuilderExtensions.cs => AbpModelBuilderObjectExtensions.cs} (87%) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderObjectExtensions.cs similarity index 87% rename from framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderExtensions.cs rename to framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderObjectExtensions.cs index 5af3fd44db..295f6ef7cf 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderObjectExtensions.cs @@ -3,7 +3,7 @@ using Volo.Abp.ObjectExtending; namespace Volo.Abp.EntityFrameworkCore.Modeling { - public static class AbpModelBuilderExtensions + public static class AbpModelBuilderObjectExtensions { public static void TryConfigureObjectExtensions(this ModelBuilder modelBuilder) where TDbContext : DbContext From 1dc515294c6273ac90a36b28aa6065ac0e1d4ca3 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 5 May 2021 22:05:00 +0800 Subject: [PATCH 3/8] Update EfCoreObjectExtensionManagerExtensions --- .../ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 67a0d1d971..2701ce8e29 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.ObjectExtending public static ObjectExtensionManager MapEfCoreDbContext( [NotNull] this ObjectExtensionManager objectExtensionManager, [NotNull] Action modelBuilderAction) - where TDbContext: DbContext + where TDbContext: DbContext , IHasExtraProperties { return objectExtensionManager.AddOrUpdate( typeof(TDbContext), @@ -25,7 +25,7 @@ namespace Volo.Abp.ObjectExtending public static ObjectExtensionManager MapEfCoreEntity( [NotNull] this ObjectExtensionManager objectExtensionManager, [NotNull] Action entityTypeBuildAction) - where TEntity : IEntity + where TEntity : IHasExtraProperties, IEntity { return MapEfCoreEntity( objectExtensionManager, From e8b9ee6b9092c0114694e079bfcf88c076a7c55c Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 7 May 2021 16:34:26 +0800 Subject: [PATCH 4/8] remove IHasExtraProperties restrictions --- .../Volo/Abp/EntityFrameworkCore/AbpDbContext.cs | 5 +---- .../EfCoreObjectExtensionManagerExtensions.cs | 4 ++-- .../Volo/Abp/ObjectExtending/ObjectExtensionInfo.cs | 2 +- .../Volo/Abp/ObjectExtending/ObjectExtensionManager.cs | 6 ------ 4 files changed, 4 insertions(+), 13 deletions(-) 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 29c88194f6..22f04542f1 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -31,13 +31,11 @@ using Volo.Abp.Uow; namespace Volo.Abp.EntityFrameworkCore { - public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, ITransientDependency, IHasExtraProperties + public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, ITransientDependency 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; @@ -88,7 +86,6 @@ 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/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs index 2701ce8e29..0a22162104 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.ObjectExtending public static ObjectExtensionManager MapEfCoreDbContext( [NotNull] this ObjectExtensionManager objectExtensionManager, [NotNull] Action modelBuilderAction) - where TDbContext: DbContext , IHasExtraProperties + where TDbContext : DbContext { return objectExtensionManager.AddOrUpdate( typeof(TDbContext), @@ -25,7 +25,7 @@ namespace Volo.Abp.ObjectExtending public static ObjectExtensionManager MapEfCoreEntity( [NotNull] this ObjectExtensionManager objectExtensionManager, [NotNull] Action entityTypeBuildAction) - where TEntity : IHasExtraProperties, IEntity + where TEntity : IEntity { return MapEfCoreEntity( objectExtensionManager, diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionInfo.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionInfo.cs index d54ee7104a..18b3c2c73d 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionInfo.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionInfo.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.ObjectExtending public ObjectExtensionInfo([NotNull] Type type) { - Type = Check.AssignableTo(type, nameof(type)); + Type = type; Properties = new ConcurrentDictionary(); Configuration = new ConcurrentDictionary(); Validators = new List>(); diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionManager.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionManager.cs index 4cbc3a3fb8..85a60a2824 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionManager.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionManager.cs @@ -25,7 +25,6 @@ namespace Volo.Abp.ObjectExtending [NotNull] public virtual ObjectExtensionManager AddOrUpdate( [CanBeNull] Action configureAction = null) - where TObject : IHasExtraProperties { return AddOrUpdate(typeof(TObject), configureAction); } @@ -50,8 +49,6 @@ namespace Volo.Abp.ObjectExtending [NotNull] Type type, [CanBeNull] Action configureAction = null) { - Check.AssignableTo(type, nameof(type)); - var extensionInfo = ObjectsExtensions.GetOrAdd( type, _ => new ObjectExtensionInfo(type) @@ -64,7 +61,6 @@ namespace Volo.Abp.ObjectExtending [CanBeNull] public virtual ObjectExtensionInfo GetOrNull() - where TObject : IHasExtraProperties { return GetOrNull(typeof(TObject)); } @@ -72,8 +68,6 @@ namespace Volo.Abp.ObjectExtending [CanBeNull] public virtual ObjectExtensionInfo GetOrNull([NotNull] Type type) { - Check.AssignableTo(type, nameof(type)); - return ObjectsExtensions.GetOrDefault(type); } From 3345e2e7bdebd897e5f63c85a2cc45afd8fd652f Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 11 May 2021 16:52:20 +0800 Subject: [PATCH 5/8] Support multiple usages --- .../EfCoreObjectExtensionInfoExtensions.cs | 50 +++++++++++-------- .../EfCoreObjectExtensionManagerExtensions.cs | 15 ++++-- .../Domain/TestEntityExtensionConfigurator.cs | 12 ++++- .../EntityFrameworkCore/TestAppDbContext.cs | 4 +- 4 files changed, 54 insertions(+), 27 deletions(-) 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 580e29b920..f27fc12d64 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionInfoExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionInfoExtensions.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Linq; using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; @@ -82,10 +84,19 @@ namespace Volo.Abp.ObjectExtending { Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo)); - objectExtensionInfo.Configuration[EfCoreEntityConfigurationName] = + var mappingOptionList = new List + { new ObjectExtensionInfoEfCoreMappingOptions( objectExtensionInfo, - entityTypeBuildAction); + entityTypeBuildAction) + }; + + objectExtensionInfo.Configuration.AddOrUpdate(EfCoreEntityConfigurationName, mappingOptionList, + (k, v) => + { + v.As>().Add(mappingOptionList.First()); + return v; + }); return objectExtensionInfo; } @@ -96,40 +107,39 @@ namespace Volo.Abp.ObjectExtending { Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo)); - objectExtensionInfo.Configuration[EfCoreDbContextConfigurationName] = + var mappingOptionList = new List + { new ObjectExtensionInfoEfCoreMappingOptions( objectExtensionInfo, - modelBuildAction); + modelBuildAction) + }; + + objectExtensionInfo.Configuration.AddOrUpdate(EfCoreDbContextConfigurationName, mappingOptionList, + (k, v) => + { + v.As>().Add(mappingOptionList.First()); + return v; + }); return objectExtensionInfo; } - [CanBeNull] - public static ObjectExtensionInfoEfCoreMappingOptions GetEfCoreEntityMappingOrNull( + public static List GetEfCoreEntityMappings( [NotNull] this ObjectExtensionInfo objectExtensionInfo) { Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo)); - if (!objectExtensionInfo.Configuration.TryGetValue(EfCoreEntityConfigurationName, out var options)) - { - return null; - } - - return options as ObjectExtensionInfoEfCoreMappingOptions; + return !objectExtensionInfo.Configuration.TryGetValue(EfCoreEntityConfigurationName, out var options) ? + new List() : options.As>(); } - [CanBeNull] - public static ObjectExtensionInfoEfCoreMappingOptions GetEfCoreDbContextMappingOrNull( + public static List GetEfCoreDbContextMappings( [NotNull] this ObjectExtensionInfo objectExtensionInfo) { Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo)); - if (!objectExtensionInfo.Configuration.TryGetValue(EfCoreDbContextConfigurationName, out var options)) - { - return null; - } - - return options as ObjectExtensionInfoEfCoreMappingOptions; + return !objectExtensionInfo.Configuration.TryGetValue(EfCoreDbContextConfigurationName, out var options) ? + new List() : options.As>(); } } } 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 0a22162104..a7e406f70f 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs @@ -163,8 +163,12 @@ namespace Volo.Abp.ObjectExtending return; } - var efCoreEntityMapping = objectExtension.GetEfCoreEntityMappingOrNull(); - efCoreEntityMapping?.EntityTypeBuildAction?.Invoke(typeBuilder); + var efCoreEntityMappings = objectExtension.GetEfCoreEntityMappings(); + + foreach (var efCoreEntityMapping in efCoreEntityMappings) + { + efCoreEntityMapping?.EntityTypeBuildAction?.Invoke(typeBuilder); + } foreach (var property in objectExtension.GetProperties()) { @@ -203,9 +207,12 @@ namespace Volo.Abp.ObjectExtending return; } - var efCoreDbContextMapping = objectExtension.GetEfCoreDbContextMappingOrNull(); + var efCoreDbContextMappings = objectExtension.GetEfCoreDbContextMappings(); - efCoreDbContextMapping?.ModelBuildAction?.Invoke(modelBuilder); + foreach (var efCoreDbContextMapping in efCoreDbContextMappings) + { + efCoreDbContextMapping?.ModelBuildAction?.Invoke(modelBuilder); + } } } } 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 f2618966b8..a3b0004027 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 @@ -40,7 +40,12 @@ namespace Volo.Abp.EntityFrameworkCore.Domain ).MapEfCoreEntity(b => { b.As>() - .Property(x=>x.Name).IsRequired().HasMaxLength(200); + .Property(x=>x.Name).IsRequired(); + + }).MapEfCoreEntity(b => + { + b.As>() + .Property(x=>x.Name).HasMaxLength(200); }).MapEfCoreEntity(typeof(Person), b => { @@ -52,6 +57,11 @@ namespace Volo.Abp.EntityFrameworkCore.Domain { b.Entity().Property(x => x.Name).IsRequired(); }); + + 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 4d4f078839..2b4e5ec66c 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 @@ -32,8 +32,6 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore base.OnModelCreating(modelBuilder); - modelBuilder.TryConfigureObjectExtensions(); - modelBuilder.Entity(b => { b.HasKey(p => new {p.PersonId, p.Number}); @@ -54,6 +52,8 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore d.HasKey(x => new {x.CityId, x.Name}); }); }); + + modelBuilder.TryConfigureObjectExtensions(); } } } From 546f4710ddf4a0b62c34380e3c6ae6347e225b35 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 11 May 2021 17:55:18 +0800 Subject: [PATCH 6/8] Update EfCoreObjectExtensionManagerExtensions.cs --- .../ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 a7e406f70f..86d4115421 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs @@ -167,7 +167,7 @@ namespace Volo.Abp.ObjectExtending foreach (var efCoreEntityMapping in efCoreEntityMappings) { - efCoreEntityMapping?.EntityTypeBuildAction?.Invoke(typeBuilder); + efCoreEntityMapping.EntityTypeBuildAction?.Invoke(typeBuilder); } foreach (var property in objectExtension.GetProperties()) @@ -211,7 +211,7 @@ namespace Volo.Abp.ObjectExtending foreach (var efCoreDbContextMapping in efCoreDbContextMappings) { - efCoreDbContextMapping?.ModelBuildAction?.Invoke(modelBuilder); + efCoreDbContextMapping.ModelBuildAction?.Invoke(modelBuilder); } } } From 008c8e6f48bb2a0afbed3fb66f750a44d31e082d Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 19 May 2021 11:45:32 +0800 Subject: [PATCH 7/8] Add ApplyObjectExtensionMappings method --- .../AbpEntityTypeBuilderExtensions.cs | 7 ++- .../EfCoreObjectExtensionManagerExtensions.cs | 30 ++++++++---- .../EntityFrameworkCore/TestAppDbContext.cs | 6 +++ ...tLoggingDbContextModelBuilderExtensions.cs | 8 ++++ ...undJobsDbContextModelCreatingExtensions.cs | 2 + ...StoringDbContextModelCreatingExtensions.cs | 4 ++ ...BloggingDbContextModelBuilderExtensions.cs | 12 +++++ .../CmsKitDbContextModelCreatingExtensions.cs | 22 +++++++++ .../DocsDbContextModelBuilderExtensions.cs | 6 +++ ...agementDbContextModelCreatingExtensions.cs | 2 + ...IdentityDbContextModelBuilderExtensions.cs | 26 +++++++++++ ...yServerDbContextModelCreatingExtensions.cs | 46 +++++++++++++++++++ ...nagementDbContextModelBuilderExtensions.cs | 2 + ...nagementDbContextModelBuilderExtensions.cs | 2 + ...agementDbContextModelCreatingExtensions.cs | 4 ++ 15 files changed, 170 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs index a40c4d6254..532670c19c 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs @@ -78,10 +78,15 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling { if (b.Metadata.ClrType.IsAssignableTo()) { - ObjectExtensionManager.Instance.ConfigureEfCoreEntity(b); + ObjectExtensionManager.Instance.ConfigureEfCoreEntityProperties(b); } } + public static void ApplyObjectExtensionMappings(this EntityTypeBuilder b) + { + ObjectExtensionManager.Instance.ConfigureEfCoreEntity(b); + } + public static void ConfigureSoftDelete(this EntityTypeBuilder b) where T : class, ISoftDelete { 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 86d4115421..5d5386a043 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs @@ -150,7 +150,7 @@ namespace Volo.Abp.ObjectExtending ); } - public static void ConfigureEfCoreEntity( + public static void ConfigureEfCoreEntityProperties( [NotNull] this ObjectExtensionManager objectExtensionManager, [NotNull] EntityTypeBuilder typeBuilder) { @@ -163,13 +163,6 @@ namespace Volo.Abp.ObjectExtending return; } - var efCoreEntityMappings = objectExtension.GetEfCoreEntityMappings(); - - foreach (var efCoreEntityMapping in efCoreEntityMappings) - { - efCoreEntityMapping.EntityTypeBuildAction?.Invoke(typeBuilder); - } - foreach (var property in objectExtension.GetProperties()) { var efCoreMapping = property.GetEfCoreMappingOrNull(); @@ -193,6 +186,27 @@ namespace Volo.Abp.ObjectExtending } } + public static void ConfigureEfCoreEntity( + [NotNull] this ObjectExtensionManager objectExtensionManager, + [NotNull] EntityTypeBuilder typeBuilder) + { + Check.NotNull(objectExtensionManager, nameof(objectExtensionManager)); + Check.NotNull(typeBuilder, nameof(typeBuilder)); + + var objectExtension = objectExtensionManager.GetOrNull(typeBuilder.Metadata.ClrType); + if (objectExtension == null) + { + return; + } + + var efCoreEntityMappings = objectExtension.GetEfCoreEntityMappings(); + + foreach (var efCoreEntityMapping in efCoreEntityMappings) + { + efCoreEntityMapping.EntityTypeBuildAction?.Invoke(typeBuilder); + } + } + public static void ConfigureEfCoreDbContext( [NotNull] this ObjectExtensionManager objectExtensionManager, [NotNull] ModelBuilder modelBuilder) 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 82f7bf289c..6263c116b8 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 @@ -42,6 +42,8 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore modelBuilder.Entity(b => { b.HasKey(p => new {p.PersonId, p.Number}); + + b.ApplyObjectExtensionMappings(); }); modelBuilder @@ -49,6 +51,8 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore { p.HasNoKey(); p.ToView("View_PersonView"); + + p.ApplyObjectExtensionMappings(); }); modelBuilder.Entity(b => @@ -58,6 +62,8 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore d.WithOwner().HasForeignKey(x => x.CityId); d.HasKey(x => new {x.CityId, x.Name}); }); + + b.ApplyObjectExtensionMappings(); }); modelBuilder.TryConfigureObjectExtensions(); 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 261c378fd9..494e4cefde 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 @@ -53,6 +53,8 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore b.HasIndex(x => new { x.TenantId, x.ExecutionTime }); b.HasIndex(x => new { x.TenantId, x.UserId, x.ExecutionTime }); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -70,6 +72,8 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore b.HasIndex(x => new { x.AuditLogId }); b.HasIndex(x => new { x.TenantId, x.ServiceName, x.MethodName, x.ExecutionTime }); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -89,6 +93,8 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore b.HasIndex(x => new { x.AuditLogId }); b.HasIndex(x => new { x.TenantId, x.EntityTypeFullName, x.EntityId }); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -103,6 +109,8 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore b.Property(x => x.OriginalValue).HasMaxLength(EntityPropertyChangeConsts.MaxOriginalValueLength).HasColumnName(nameof(EntityPropertyChange.OriginalValue)); b.HasIndex(x => new { x.EntityChangeId }); + + b.ApplyObjectExtensionMappings(); }); 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 b6f5437836..76d39a77ae 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 @@ -39,6 +39,8 @@ namespace Volo.Abp.BackgroundJobs.EntityFrameworkCore b.Property(x => x.Priority).HasDefaultValue(BackgroundJobPriority.Normal); b.HasIndex(x => new { x.IsAbandoned, x.NextTryTime }); + + b.ApplyObjectExtensionMappings(); }); 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 6c92ddb7b1..ddcaae7911 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 @@ -30,6 +30,8 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore b.HasMany().WithOne().HasForeignKey(p => p.ContainerId); b.HasIndex(x => new {x.TenantId, x.Name}); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -45,6 +47,8 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore b.HasOne().WithMany().HasForeignKey(p => p.ContainerId); b.HasIndex(x => new {x.TenantId, x.ContainerId, x.Name}); + + b.ApplyObjectExtensionMappings(); }); builder.TryConfigureObjectExtensions(); 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 ee81343725..4a0d23a0fb 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 @@ -38,6 +38,8 @@ namespace Volo.Blogging.EntityFrameworkCore b.ConfigureByConvention(); b.ConfigureAbpUser(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -49,6 +51,8 @@ namespace Volo.Blogging.EntityFrameworkCore b.Property(x => x.Name).IsRequired().HasMaxLength(BlogConsts.MaxNameLength).HasColumnName(nameof(Blog.Name)); b.Property(x => x.ShortName).IsRequired().HasMaxLength(BlogConsts.MaxShortNameLength).HasColumnName(nameof(Blog.ShortName)); b.Property(x => x.Description).IsRequired(false).HasMaxLength(BlogConsts.MaxDescriptionLength).HasColumnName(nameof(Blog.Description)); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -67,6 +71,8 @@ namespace Volo.Blogging.EntityFrameworkCore b.HasMany(p => p.Tags).WithOne().HasForeignKey(qt => qt.PostId); b.HasOne().WithMany().IsRequired().HasForeignKey(p => p.BlogId); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -81,6 +87,8 @@ namespace Volo.Blogging.EntityFrameworkCore b.HasOne().WithMany().HasForeignKey(p => p.RepliedCommentId); b.HasOne().WithMany().IsRequired().HasForeignKey(p => p.PostId); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -94,6 +102,8 @@ namespace Volo.Blogging.EntityFrameworkCore b.Property(x => x.UsageCount).HasColumnName(nameof(Tag.UsageCount)); b.HasMany().WithOne().HasForeignKey(qt => qt.TagId); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -106,6 +116,8 @@ namespace Volo.Blogging.EntityFrameworkCore b.Property(x => x.TagId).HasColumnName(nameof(PostTag.TagId)); b.HasKey(x => new { x.PostId, x.TagId }); + + b.ApplyObjectExtensionMappings(); }); 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 accb4433c6..6cfe2ac94b 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 @@ -42,6 +42,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.HasIndex(x => new { x.TenantId, x.UserName }); b.HasIndex(x => new { x.TenantId, x.Email }); + + b.ApplyObjectExtensionMappings(); }); } else @@ -63,6 +65,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.HasIndex(x => new { x.TenantId, x.EntityType, x.EntityId, x.ReactionName }); b.HasIndex(x => new { x.TenantId, x.CreatorId, x.EntityType, x.EntityId, x.ReactionName }); + + b.ApplyObjectExtensionMappings(); }); } else @@ -85,6 +89,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.HasIndex(x => new { x.TenantId, x.EntityType, x.EntityId }); b.HasIndex(x => new { x.TenantId, x.RepliedCommentId }); + + b.ApplyObjectExtensionMappings(); }); } else @@ -105,6 +111,8 @@ namespace Volo.CmsKit.EntityFrameworkCore r.Property(x => x.EntityId).IsRequired().HasMaxLength(RatingConsts.MaxEntityIdLength); r.HasIndex(x => new { x.TenantId, x.EntityType, x.EntityId, x.CreatorId }); + + r.ApplyObjectExtensionMappings(); }); } else @@ -128,6 +136,8 @@ namespace Volo.CmsKit.EntityFrameworkCore x.TenantId, x.Name }); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -142,6 +152,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(x => x.TagId).IsRequired(); b.HasIndex(x => new { x.TenantId, x.EntityId, x.TagId }); + + b.ApplyObjectExtensionMappings(); }); } else @@ -163,6 +175,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(x => x.Content).HasMaxLength(PageConsts.MaxContentLength); b.HasIndex(x => new { x.TenantId, Url = x.Slug }); + + b.ApplyObjectExtensionMappings(); }); } else @@ -181,6 +195,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(p => p.Name).IsRequired().HasMaxLength(BlogConsts.MaxNameLength); b.Property(p => p.Slug).IsRequired().HasMaxLength(BlogConsts.MaxSlugLength); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -196,6 +212,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(p => p.Content).HasMaxLength(BlogPostConsts.MaxContentLength); b.HasIndex(x => new { x.Slug, x.BlogId }); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -205,6 +223,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.ConfigureByConvention(); b.Property(p => p.FeatureName).IsRequired().HasMaxLength(BlogFeatureConsts.MaxFeatureNameLenth); + + b.ApplyObjectExtensionMappings(); }); } else @@ -226,6 +246,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(x => x.Name).IsRequired().HasMaxLength(MediaDescriptorConsts.MaxNameLength); b.Property(x => x.MimeType).IsRequired().HasMaxLength(MediaDescriptorConsts.MaxMimeTypeLength); b.Property(x => x.Size).HasMaxLength(MediaDescriptorConsts.MaxSizeLength); + + b.ApplyObjectExtensionMappings(); }); } else 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 bec8c00414..6f7c7d1a89 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 @@ -40,6 +40,8 @@ namespace Volo.Docs.EntityFrameworkCore b.Property(x => x.NavigationDocumentName).IsRequired().HasMaxLength(ProjectConsts.MaxNavigationDocumentNameLength); b.Property(x => x.ParametersDocumentName).IsRequired().HasMaxLength(ProjectConsts.MaxParametersDocumentNameLength); b.Property(x => x.LatestVersionBranchName).HasMaxLength(ProjectConsts.MaxLatestVersionBranchNameLength); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -62,6 +64,8 @@ namespace Volo.Docs.EntityFrameworkCore b.HasMany(x => x.Contributors).WithOne() .HasForeignKey(x => new { x.DocumentId }) .IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -71,6 +75,8 @@ namespace Volo.Docs.EntityFrameworkCore b.ConfigureByConvention(); b.HasKey(x => new { x.DocumentId, x.Username }); + + b.ApplyObjectExtensionMappings(); }); 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 6bbc453d33..b482788e49 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 @@ -36,6 +36,8 @@ namespace Volo.Abp.FeatureManagement.EntityFrameworkCore b.Property(x => x.ProviderKey).HasMaxLength(FeatureValueConsts.MaxProviderKeyLength); b.HasIndex(x => new { x.Name, x.ProviderName, x.ProviderKey }); + + b.ApplyObjectExtensionMappings(); }); 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 4195266af7..204eab3d6f 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 @@ -60,6 +60,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore b.HasIndex(u => u.NormalizedEmail); b.HasIndex(u => u.UserName); b.HasIndex(u => u.Email); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -74,6 +76,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore b.Property(uc => uc.ClaimValue).HasMaxLength(IdentityUserClaimConsts.MaxClaimValueLength); b.HasIndex(uc => uc.UserId); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -88,6 +92,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore b.HasOne().WithMany(u => u.Roles).HasForeignKey(ur => ur.UserId).IsRequired(); b.HasIndex(ur => new {ur.RoleId, ur.UserId}); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -106,6 +112,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore .HasMaxLength(IdentityUserLoginConsts.MaxProviderDisplayNameLength); b.HasIndex(l => new {l.LoginProvider, l.ProviderKey}); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -119,6 +127,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore b.Property(ul => ul.LoginProvider).HasMaxLength(IdentityUserTokenConsts.MaxLoginProviderLength) .IsRequired(); b.Property(ul => ul.Name).HasMaxLength(IdentityUserTokenConsts.MaxNameLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -136,6 +146,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore b.HasMany(r => r.Claims).WithOne().HasForeignKey(rc => rc.RoleId).IsRequired(); b.HasIndex(r => r.NormalizedName); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -150,6 +162,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore b.Property(uc => uc.ClaimValue).HasMaxLength(IdentityRoleClaimConsts.MaxClaimValueLength); b.HasIndex(uc => uc.RoleId); + + b.ApplyObjectExtensionMappings(); }); if (builder.IsHostDatabase()) @@ -165,6 +179,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore b.Property(uc => uc.Regex).HasMaxLength(IdentityClaimTypeConsts.MaxRegexLength); b.Property(uc => uc.RegexDescription).HasMaxLength(IdentityClaimTypeConsts.MaxRegexDescriptionLength); b.Property(uc => uc.Description).HasMaxLength(IdentityClaimTypeConsts.MaxDescriptionLength); + + b.ApplyObjectExtensionMappings(); }); } @@ -183,6 +199,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore b.HasMany(ou => ou.Roles).WithOne().HasForeignKey(our => our.OrganizationUnitId).IsRequired(); b.HasIndex(ou => ou.Code); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -196,6 +214,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore b.HasOne().WithMany().HasForeignKey(ou => ou.RoleId).IsRequired(); b.HasIndex(ou => new {ou.RoleId, ou.OrganizationUnitId}); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -209,6 +229,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore b.HasOne().WithMany().HasForeignKey(ou => ou.OrganizationUnitId).IsRequired(); b.HasIndex(ou => new {ou.UserId, ou.OrganizationUnitId}); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -234,6 +256,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore b.HasIndex(x => new { x.TenantId, x.Identity }); b.HasIndex(x => new { x.TenantId, x.Action }); b.HasIndex(x => new { x.TenantId, x.UserId }); + + b.ApplyObjectExtensionMappings(); }); if (builder.IsHostDatabase()) @@ -251,6 +275,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore LinkedUserId = x.TargetUserId, LinkedTenantId = x.TargetTenantId }).IsUnique(); + + b.ApplyObjectExtensionMappings(); }); } 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 528919cd1b..c8b0dc0682 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 @@ -63,6 +63,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); b.HasIndex(x => x.ClientId); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -74,6 +76,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ClientId, x.GrantType}); b.Property(x => x.GrantType).HasMaxLength(ClientGrantTypeConsts.GrantTypeMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -90,6 +94,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore } b.Property(x => x.RedirectUri).HasMaxLength(ClientRedirectUriConsts.RedirectUriMaxLengthValue).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -108,6 +114,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.Property(x => x.PostLogoutRedirectUri) .HasMaxLength(ClientPostLogoutRedirectUriConsts.PostLogoutRedirectUriMaxLengthValue) .IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -119,6 +127,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ClientId, x.Scope}); b.Property(x => x.Scope).HasMaxLength(ClientScopeConsts.ScopeMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -136,6 +146,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore } b.Property(x => x.Value).HasMaxLength(ClientSecretConsts.ValueMaxLength).IsRequired(); b.Property(x => x.Description).HasMaxLength(ClientSecretConsts.DescriptionMaxLength); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -148,6 +160,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.Property(x => x.Type).HasMaxLength(ClientClaimConsts.TypeMaxLength).IsRequired(); b.Property(x => x.Value).HasMaxLength(ClientClaimConsts.ValueMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -159,6 +173,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ClientId, x.Provider}); b.Property(x => x.Provider).HasMaxLength(ClientIdPRestrictionConsts.ProviderMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -170,6 +186,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ClientId, x.Origin}); b.Property(x => x.Origin).HasMaxLength(ClientCorsOriginConsts.OriginMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -186,6 +204,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore ClientPropertyConsts.ValueMaxLength = 300; } b.Property(x => x.Value).HasMaxLength(ClientPropertyConsts.ValueMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); #endregion @@ -204,6 +224,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -215,6 +237,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.IdentityResourceId, x.Type}); b.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -231,6 +255,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore IdentityResourcePropertyConsts.ValueMaxLength = 300; } b.Property(x => x.Value).HasMaxLength(IdentityResourcePropertyConsts.ValueMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); #endregion @@ -252,6 +278,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasMany(x => x.Scopes).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -271,6 +299,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.Property(x => x.Value).HasMaxLength(ApiResourceSecretConsts.ValueMaxLength).IsRequired(); b.Property(x => x.Description).HasMaxLength(ApiResourceSecretConsts.DescriptionMaxLength); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -282,6 +312,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ApiResourceId, x.Type}); b.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -293,6 +325,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ApiResourceId, x.Scope}); b.Property(x => x.Scope).HasMaxLength(ApiResourceScopeConsts.ScopeMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -309,6 +343,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore ApiResourcePropertyConsts.ValueMaxLength = 300; } b.Property(x => x.Value).HasMaxLength(ApiResourcePropertyConsts.ValueMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); #endregion @@ -327,6 +363,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.ApiScopeId).IsRequired(); b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ApiScopeId).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -338,6 +376,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ApiScopeId, x.Type}); b.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -354,6 +394,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore ApiScopePropertyConsts.ValueMaxLength = 300; } b.Property(x => x.Value).HasMaxLength(ApiScopePropertyConsts.ValueMaxLength).IsRequired(); + + b.ApplyObjectExtensionMappings(); }); #endregion @@ -386,6 +428,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasIndex(x => new {x.SubjectId, x.ClientId, x.Type}); b.HasIndex(x => new {x.SubjectId, x.SessionId, x.Type}); b.HasIndex(x => x.Expiration); + + b.ApplyObjectExtensionMappings(); }); #endregion @@ -416,6 +460,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasIndex(x => new {x.UserCode}); b.HasIndex(x => x.DeviceCode).IsUnique(); b.HasIndex(x => x.Expiration); + + b.ApplyObjectExtensionMappings(); }); #endregion 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 4f710151fd..8810f4a0bc 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 @@ -31,6 +31,8 @@ namespace Volo.Abp.PermissionManagement.EntityFrameworkCore b.Property(x => x.ProviderKey).HasMaxLength(PermissionGrantConsts.MaxProviderKeyLength).IsRequired(); b.HasIndex(x => new {x.Name, x.ProviderName, x.ProviderKey}); + + b.ApplyObjectExtensionMappings(); }); builder.TryConfigureObjectExtensions(); 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 a3b657009a..5e9f75eefa 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 @@ -54,6 +54,8 @@ namespace Volo.Abp.SettingManagement.EntityFrameworkCore b.Property(x => x.ProviderKey).HasMaxLength(SettingConsts.MaxProviderKeyLength); b.HasIndex(x => new {x.Name, x.ProviderName, x.ProviderKey}); + + b.ApplyObjectExtensionMappings(); }); 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 4708ae8e30..398dc66fe5 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 @@ -36,6 +36,8 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore b.HasMany(u => u.ConnectionStrings).WithOne().HasForeignKey(uc => uc.TenantId).IsRequired(); b.HasIndex(u => u.Name); + + b.ApplyObjectExtensionMappings(); }); builder.Entity(b => @@ -48,6 +50,8 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore b.Property(cs => cs.Name).IsRequired().HasMaxLength(TenantConnectionStringConsts.MaxNameLength); b.Property(cs => cs.Value).IsRequired().HasMaxLength(TenantConnectionStringConsts.MaxValueLength); + + b.ApplyObjectExtensionMappings(); }); builder.TryConfigureObjectExtensions(); From 156da08c0f7f9ba6e29545f2363009f39522a7e7 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 31 May 2021 17:48:08 +0800 Subject: [PATCH 8/8] Improved --- .../AbpEntityTypeBuilderExtensions.cs | 2 +- .../EfCoreObjectExtensionManagerExtensions.cs | 30 +++++-------------- .../ObjectExtending/ObjectExtensionInfo.cs | 2 +- 3 files changed, 10 insertions(+), 24 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs index 532670c19c..44cad9c638 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs @@ -78,7 +78,7 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling { if (b.Metadata.ClrType.IsAssignableTo()) { - ObjectExtensionManager.Instance.ConfigureEfCoreEntityProperties(b); + ObjectExtensionManager.Instance.ConfigureEfCoreEntity(b); } } 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 5d5386a043..86d4115421 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs @@ -150,7 +150,7 @@ namespace Volo.Abp.ObjectExtending ); } - public static void ConfigureEfCoreEntityProperties( + public static void ConfigureEfCoreEntity( [NotNull] this ObjectExtensionManager objectExtensionManager, [NotNull] EntityTypeBuilder typeBuilder) { @@ -163,6 +163,13 @@ namespace Volo.Abp.ObjectExtending return; } + var efCoreEntityMappings = objectExtension.GetEfCoreEntityMappings(); + + foreach (var efCoreEntityMapping in efCoreEntityMappings) + { + efCoreEntityMapping.EntityTypeBuildAction?.Invoke(typeBuilder); + } + foreach (var property in objectExtension.GetProperties()) { var efCoreMapping = property.GetEfCoreMappingOrNull(); @@ -186,27 +193,6 @@ namespace Volo.Abp.ObjectExtending } } - public static void ConfigureEfCoreEntity( - [NotNull] this ObjectExtensionManager objectExtensionManager, - [NotNull] EntityTypeBuilder typeBuilder) - { - Check.NotNull(objectExtensionManager, nameof(objectExtensionManager)); - Check.NotNull(typeBuilder, nameof(typeBuilder)); - - var objectExtension = objectExtensionManager.GetOrNull(typeBuilder.Metadata.ClrType); - if (objectExtension == null) - { - return; - } - - var efCoreEntityMappings = objectExtension.GetEfCoreEntityMappings(); - - foreach (var efCoreEntityMapping in efCoreEntityMappings) - { - efCoreEntityMapping.EntityTypeBuildAction?.Invoke(typeBuilder); - } - } - public static void ConfigureEfCoreDbContext( [NotNull] this ObjectExtensionManager objectExtensionManager, [NotNull] ModelBuilder modelBuilder) diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionInfo.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionInfo.cs index 5f653fd92c..7b71386474 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionInfo.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionInfo.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.ObjectExtending public ObjectExtensionInfo([NotNull] Type type) { - Type = type; + Type = Check.NotNull(type, nameof(type)); Properties = new ConcurrentDictionary(); Configuration = new ConcurrentDictionary(); Validators = new List>();