From b54263d327711a6dd64316a0ed6690525a485e5d Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 2 Oct 2024 19:48:42 +0800 Subject: [PATCH] Add a `Type` parameter to `ExtraPropertiesValueConverter`. --- .../Modeling/AbpEntityTypeBuilderExtensions.cs | 5 ++++- .../ExtraPropertiesValueConverter.cs | 14 ++++++++------ 2 files changed, 12 insertions(+), 7 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 5d002e87fa2..cfaee16e6a2 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 @@ -2,6 +2,7 @@ using System.Collections.Generic; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Volo.Abp.Auditing; using Volo.Abp.Data; using Volo.Abp.Domain.Entities; @@ -60,9 +61,11 @@ public static void TryConfigureExtraProperties(this EntityTypeBuilder b) return; } + var type = typeof(ExtraPropertiesValueConverter<>).MakeGenericType(b.Metadata.ClrType); + var extraPropertiesValueConverter = Activator.CreateInstance(type)!.As>(); b.Property(nameof(IHasExtraProperties.ExtraProperties)) .HasColumnName(nameof(IHasExtraProperties.ExtraProperties)) - .HasConversion(new ExtraPropertiesValueConverter(b.Metadata.ClrType)) + .HasConversion(extraPropertiesValueConverter) .Metadata.SetValueComparer(new ExtraPropertyDictionaryValueComparer()); b.TryConfigureObjectExtensions(); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs index 980d926c3b3..a24284356c1 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs @@ -8,22 +8,23 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters; -public class ExtraPropertiesValueConverter : ValueConverter +public class ExtraPropertiesValueConverter : ValueConverter { - public ExtraPropertiesValueConverter(Type entityType) + public ExtraPropertiesValueConverter() : base( - d => SerializeObject(d, entityType), - s => DeserializeObject(s, entityType)) + d => SerializeObject(d), + s => DeserializeObject(s)) { } public readonly static JsonSerializerOptions SerializeOptions = new JsonSerializerOptions(); - private static string SerializeObject(ExtraPropertyDictionary extraProperties, Type? entityType) + private static string SerializeObject(ExtraPropertyDictionary extraProperties) { var copyDictionary = new Dictionary(extraProperties); + var entityType = typeof(TEntityType); if (entityType != null) { var objectExtension = ObjectExtensionManager.Instance.GetOrNull(entityType); @@ -50,7 +51,7 @@ private static string SerializeObject(ExtraPropertyDictionary extraProperties, T } }; - private static ExtraPropertyDictionary DeserializeObject(string extraPropertiesAsJson, Type? entityType) + private static ExtraPropertyDictionary DeserializeObject(string extraPropertiesAsJson) { if (extraPropertiesAsJson.IsNullOrEmpty() || extraPropertiesAsJson == "{}") { @@ -60,6 +61,7 @@ private static ExtraPropertyDictionary DeserializeObject(string extraPropertiesA var dictionary = JsonSerializer.Deserialize(extraPropertiesAsJson, DeserializeOptions) ?? new ExtraPropertyDictionary(); + var entityType = typeof(TEntityType); if (entityType != null) { var objectExtension = ObjectExtensionManager.Instance.GetOrNull(entityType);