Browse Source

Merge pull request #20951 from abpframework/ExtraPropertiesValueConverter

Add a `Type` parameter to `ExtraPropertiesValueConverter`.
pull/20957/head
SALİH ÖZKARA 2 years ago
committed by GitHub
parent
commit
b21e79aea0
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 5
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs
  2. 14
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs

5
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs

@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders; using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Volo.Abp.Auditing; using Volo.Abp.Auditing;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
@ -60,9 +61,11 @@ public static class AbpEntityTypeBuilderExtensions
return; return;
} }
var type = typeof(ExtraPropertiesValueConverter<>).MakeGenericType(b.Metadata.ClrType);
var extraPropertiesValueConverter = Activator.CreateInstance(type)!.As<ValueConverter<ExtraPropertyDictionary, string>>();
b.Property<ExtraPropertyDictionary>(nameof(IHasExtraProperties.ExtraProperties)) b.Property<ExtraPropertyDictionary>(nameof(IHasExtraProperties.ExtraProperties))
.HasColumnName(nameof(IHasExtraProperties.ExtraProperties)) .HasColumnName(nameof(IHasExtraProperties.ExtraProperties))
.HasConversion(new ExtraPropertiesValueConverter(b.Metadata.ClrType)) .HasConversion(extraPropertiesValueConverter)
.Metadata.SetValueComparer(new ExtraPropertyDictionaryValueComparer()); .Metadata.SetValueComparer(new ExtraPropertyDictionaryValueComparer());
b.TryConfigureObjectExtensions(); b.TryConfigureObjectExtensions();

14
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs

@ -8,22 +8,23 @@ using Volo.Abp.ObjectExtending;
namespace Volo.Abp.EntityFrameworkCore.ValueConverters; namespace Volo.Abp.EntityFrameworkCore.ValueConverters;
public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDictionary, string> public class ExtraPropertiesValueConverter<TEntityType> : ValueConverter<ExtraPropertyDictionary, string>
{ {
public ExtraPropertiesValueConverter(Type entityType) public ExtraPropertiesValueConverter()
: base( : base(
d => SerializeObject(d, entityType), d => SerializeObject(d),
s => DeserializeObject(s, entityType)) s => DeserializeObject(s))
{ {
} }
public readonly static JsonSerializerOptions SerializeOptions = new JsonSerializerOptions(); 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<string, object?>(extraProperties); var copyDictionary = new Dictionary<string, object?>(extraProperties);
var entityType = typeof(TEntityType);
if (entityType != null) if (entityType != null)
{ {
var objectExtension = ObjectExtensionManager.Instance.GetOrNull(entityType); var objectExtension = ObjectExtensionManager.Instance.GetOrNull(entityType);
@ -50,7 +51,7 @@ public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDiction
} }
}; };
private static ExtraPropertyDictionary DeserializeObject(string extraPropertiesAsJson, Type? entityType) private static ExtraPropertyDictionary DeserializeObject(string extraPropertiesAsJson)
{ {
if (extraPropertiesAsJson.IsNullOrEmpty() || extraPropertiesAsJson == "{}") if (extraPropertiesAsJson.IsNullOrEmpty() || extraPropertiesAsJson == "{}")
{ {
@ -60,6 +61,7 @@ public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDiction
var dictionary = JsonSerializer.Deserialize<ExtraPropertyDictionary>(extraPropertiesAsJson, DeserializeOptions) ?? var dictionary = JsonSerializer.Deserialize<ExtraPropertyDictionary>(extraPropertiesAsJson, DeserializeOptions) ??
new ExtraPropertyDictionary(); new ExtraPropertyDictionary();
var entityType = typeof(TEntityType);
if (entityType != null) if (entityType != null)
{ {
var objectExtension = ObjectExtensionManager.Instance.GetOrNull(entityType); var objectExtension = ObjectExtensionManager.Instance.GetOrNull(entityType);

Loading…
Cancel
Save