Change Dictionary<string, object> to ExtraPropertyDictionary for IHasExtraProperties

pull/6114/head
Halil İbrahim Kalkan 5 years ago
parent 43b7474013
commit c198dd8f9e

@ -17,11 +17,11 @@ namespace Volo.Abp.Auditing
public int ExecutionDuration { get; set; }
public Dictionary<string, object> ExtraProperties { get; }
public ExtraPropertyDictionary ExtraProperties { get; }
public AuditLogActionInfo()
{
ExtraProperties = new Dictionary<string, object>();
ExtraProperties = new ExtraPropertyDictionary();
}
}
}
}

@ -47,7 +47,7 @@ namespace Volo.Abp.Auditing
public List<Exception> Exceptions { get; }
public Dictionary<string, object> ExtraProperties { get; }
public ExtraPropertyDictionary ExtraProperties { get; }
public List<EntityChangeInfo> EntityChanges { get; }
@ -57,7 +57,7 @@ namespace Volo.Abp.Auditing
{
Actions = new List<AuditLogActionInfo>();
Exceptions = new List<Exception>();
ExtraProperties = new Dictionary<string, object>();
ExtraProperties = new ExtraPropertyDictionary();
EntityChanges = new List<EntityChangeInfo>();
Comments = new List<string>();
}
@ -107,4 +107,4 @@ namespace Volo.Abp.Auditing
return sb.ToString();
}
}
}
}

@ -25,13 +25,13 @@ namespace Volo.Abp.Auditing
public List<EntityPropertyChangeInfo> PropertyChanges { get; set; }
public Dictionary<string, object> ExtraProperties { get; }
public ExtraPropertyDictionary ExtraProperties { get; }
public virtual object EntityEntry { get; set; } //TODO: Try to remove since it breaks serializability
public EntityChangeInfo()
{
ExtraProperties = new Dictionary<string, object>();
ExtraProperties = new ExtraPropertyDictionary();
}
public virtual void Merge(EntityChangeInfo changeInfo)

@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Auditing;
using Volo.Abp.Data;
@ -13,7 +12,7 @@ namespace Volo.Abp.Domain.Entities
IHasExtraProperties,
IHasConcurrencyStamp
{
public virtual Dictionary<string, object> ExtraProperties { get; protected set; }
public virtual ExtraPropertyDictionary ExtraProperties { get; protected set; }
[DisableAuditing]
public virtual string ConcurrencyStamp { get; set; }
@ -21,7 +20,7 @@ namespace Volo.Abp.Domain.Entities
protected AggregateRoot()
{
ConcurrencyStamp = Guid.NewGuid().ToString("N");
ExtraProperties = new Dictionary<string, object>();
ExtraProperties = new ExtraPropertyDictionary();
this.SetDefaultsForExtraProperties();
}
@ -39,7 +38,7 @@ namespace Volo.Abp.Domain.Entities
IHasExtraProperties,
IHasConcurrencyStamp
{
public virtual Dictionary<string, object> ExtraProperties { get; protected set; }
public virtual ExtraPropertyDictionary ExtraProperties { get; protected set; }
[DisableAuditing]
public virtual string ConcurrencyStamp { get; set; }
@ -47,7 +46,7 @@ namespace Volo.Abp.Domain.Entities
protected AggregateRoot()
{
ConcurrencyStamp = Guid.NewGuid().ToString("N");
ExtraProperties = new Dictionary<string, object>();
ExtraProperties = new ExtraPropertyDictionary();
this.SetDefaultsForExtraProperties();
}
@ -55,7 +54,7 @@ namespace Volo.Abp.Domain.Entities
: base(id)
{
ConcurrencyStamp = Guid.NewGuid().ToString("N");
ExtraProperties = new Dictionary<string, object>();
ExtraProperties = new ExtraPropertyDictionary();
this.SetDefaultsForExtraProperties();
}

@ -60,10 +60,10 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling
return;
}
b.Property<Dictionary<string, object>>(nameof(IHasExtraProperties.ExtraProperties))
b.Property<ExtraPropertyDictionary>(nameof(IHasExtraProperties.ExtraProperties))
.HasColumnName(nameof(IHasExtraProperties.ExtraProperties))
.HasConversion(new ExtraPropertiesValueConverter(b.Metadata.ClrType))
.Metadata.SetValueComparer(new AbpDictionaryValueComparer<string, object>());
.Metadata.SetValueComparer(new ExtraPropertyDictionaryValueComparer());
b.TryConfigureObjectExtensions();
}

@ -1,17 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Volo.Abp.Data;
namespace Volo.Abp.EntityFrameworkCore.ValueComparers
{
public class AbpDictionaryValueComparer<TKey, TValue> : ValueComparer<Dictionary<TKey, TValue>>
public class ExtraPropertyDictionaryValueComparer : ValueComparer<ExtraPropertyDictionary>
{
public AbpDictionaryValueComparer()
public ExtraPropertyDictionaryValueComparer()
: base(
(d1, d2) => d1.SequenceEqual(d2),
d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())),
d => d.ToDictionary(k => k.Key, v => v.Value))
d => new ExtraPropertyDictionary(d))
{
}
}

@ -2,12 +2,13 @@
using System.Collections.Generic;
using System.Text.Json;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Volo.Abp.Data;
using Volo.Abp.Json.SystemTextJson.JsonConverters;
using Volo.Abp.ObjectExtending;
namespace Volo.Abp.EntityFrameworkCore.ValueConverters
{
public class ExtraPropertiesValueConverter : ValueConverter<Dictionary<string, object>, string>
public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDictionary, string>
{
public ExtraPropertiesValueConverter(Type entityType)
: base(
@ -17,7 +18,7 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters
}
private static string SerializeObject(Dictionary<string, object> extraProperties, Type entityType)
private static string SerializeObject(ExtraPropertyDictionary extraProperties, Type entityType)
{
var copyDictionary = new Dictionary<string, object>(extraProperties);
@ -39,11 +40,12 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters
return JsonSerializer.Serialize(copyDictionary);
}
private static Dictionary<string, object> DeserializeObject(string extraPropertiesAsJson, Type entityType)
private static ExtraPropertyDictionary DeserializeObject(string extraPropertiesAsJson, Type entityType)
{
var deserializeOptions = new JsonSerializerOptions();
deserializeOptions.Converters.Add(new ObjectToInferredTypesConverter());
var dictionary = JsonSerializer.Deserialize<Dictionary<string, object>>(extraPropertiesAsJson, deserializeOptions) ?? new Dictionary<string, object>();
var dictionary = JsonSerializer.Deserialize<ExtraPropertyDictionary>(extraPropertiesAsJson, deserializeOptions) ??
new ExtraPropertyDictionary();
if (entityType != null)
{
var objectExtension = ObjectExtensionManager.Instance.GetOrNull(entityType);

@ -6,6 +6,18 @@ namespace Volo.Abp.Data
public interface IHasExtraProperties
{
Dictionary<string, object> ExtraProperties { get; }
ExtraPropertyDictionary ExtraProperties { get; }
}
public class ExtraPropertyDictionary : Dictionary<string, object>
{
public ExtraPropertyDictionary()
{
}
public ExtraPropertyDictionary(IDictionary<string, object> dictionary)
: base(dictionary)
{
}
}
}

@ -9,7 +9,7 @@ namespace Volo.Abp.ObjectExtending
[Serializable]
public class ExtensibleObject : IHasExtraProperties, IValidatableObject
{
public Dictionary<string, object> ExtraProperties { get; protected set; }
public ExtraPropertyDictionary ExtraProperties { get; protected set; }
public ExtensibleObject()
: this(true)
@ -19,7 +19,7 @@ namespace Volo.Abp.ObjectExtending
public ExtensibleObject(bool setDefaultsForExtraProperties)
{
ExtraProperties = new Dictionary<string, object>();
ExtraProperties = new ExtraPropertyDictionary();
if (setDefaultsForExtraProperties)
{

Loading…
Cancel
Save