diff --git a/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs b/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs index e305cbce8a..e2420ec510 100644 --- a/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs +++ b/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs @@ -24,7 +24,10 @@ namespace AutoMapper foreach (var property in properties) { - result[property.Name] = source.ExtraProperties[property.Name]; + if (source.ExtraProperties.ContainsKey(property.Name)) + { + result[property.Name] = source.ExtraProperties[property.Name]; + } } return result; diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions.cs new file mode 100644 index 0000000000..c6618b009e --- /dev/null +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions.cs @@ -0,0 +1,22 @@ +using Volo.Abp.Data; + +namespace Volo.Abp.ObjectExtending +{ + public static class HasExtraPropertiesObjectExtendingExtensions + { + public static void MapExtraPropertiesTo(this TSource source, TDestination destination) + where TSource : IHasExtraProperties + where TDestination : IHasExtraProperties + { + var extensionPropertyInfos = ObjectExtensionManager.Instance.GetProperties(); + + foreach (var extensionPropertyInfo in extensionPropertyInfos) + { + if (source.ExtraProperties.ContainsKey(extensionPropertyInfo.Name)) + { + destination.ExtraProperties[extensionPropertyInfo.Name] = source.ExtraProperties[extensionPropertyInfo.Name]; + } + } + } + } +}