Browse Source

Add a `Type` parameter to `ExtraPropertiesValueConverter`.

pull/20951/head
maliming 2 years ago
parent
commit
b54263d327
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  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 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 class AbpEntityTypeBuilderExtensions
return;
}
var type = typeof(ExtraPropertiesValueConverter<>).MakeGenericType(b.Metadata.ClrType);
var extraPropertiesValueConverter = Activator.CreateInstance(type)!.As<ValueConverter<ExtraPropertyDictionary, string>>();
b.Property<ExtraPropertyDictionary>(nameof(IHasExtraProperties.ExtraProperties))
.HasColumnName(nameof(IHasExtraProperties.ExtraProperties))
.HasConversion(new ExtraPropertiesValueConverter(b.Metadata.ClrType))
.HasConversion(extraPropertiesValueConverter)
.Metadata.SetValueComparer(new ExtraPropertyDictionaryValueComparer());
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;
public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDictionary, string>
public class ExtraPropertiesValueConverter<TEntityType> : ValueConverter<ExtraPropertyDictionary, string>
{
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<string, object?>(extraProperties);
var entityType = typeof(TEntityType);
if (entityType != null)
{
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 == "{}")
{
@ -60,6 +61,7 @@ public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDiction
var dictionary = JsonSerializer.Deserialize<ExtraPropertyDictionary>(extraPropertiesAsJson, DeserializeOptions) ??
new ExtraPropertyDictionary();
var entityType = typeof(TEntityType);
if (entityType != null)
{
var objectExtension = ObjectExtensionManager.Instance.GetOrNull(entityType);

Loading…
Cancel
Save