Browse Source

Fix EF Core change tracking issue by creating a new dictionary instance during mapping

pull/23689/head
SALİH ÖZKARA 1 year ago
parent
commit
73fa006869
  1. 31
      framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs

31
framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs

@ -236,13 +236,34 @@ public class MapperlyAutoObjectMappingProvider : IAutoObjectMappingProvider
protected virtual void TryMapExtraProperties<TSource, TDestination>(MapExtraPropertiesAttribute? mapExtraPropertiesAttribute, TSource source, TDestination destination, ExtraPropertyDictionary destinationExtraProperty) protected virtual void TryMapExtraProperties<TSource, TDestination>(MapExtraPropertiesAttribute? mapExtraPropertiesAttribute, TSource source, TDestination destination, ExtraPropertyDictionary destinationExtraProperty)
{ {
if (mapExtraPropertiesAttribute != null && if(source is not IHasExtraProperties sourceHasExtraProperties)
typeof(IHasExtraProperties).IsAssignableFrom(typeof(TDestination)) && {
typeof(IHasExtraProperties).IsAssignableFrom(typeof(TSource))) return;
}
if (destination is not IHasExtraProperties destinationHasExtraProperties)
{
return;
}
if (sourceHasExtraProperties.ExtraProperties ==
destinationHasExtraProperties.ExtraProperties)
{
try
{
ObjectHelper.TrySetProperty(destinationHasExtraProperties, x => x.ExtraProperties, () => new ExtraPropertyDictionary(sourceHasExtraProperties.ExtraProperties));
}
catch
{
// Has no setter, ignore it.
}
}
if (mapExtraPropertiesAttribute != null)
{ {
MapExtraProperties<TSource, TDestination>( MapExtraProperties<TSource, TDestination>(
source!.As<IHasExtraProperties>(), sourceHasExtraProperties,
destination!.As<IHasExtraProperties>(), destinationHasExtraProperties,
destinationExtraProperty, destinationExtraProperty,
mapExtraPropertiesAttribute.DefinitionChecks, mapExtraPropertiesAttribute.DefinitionChecks,
mapExtraPropertiesAttribute.IgnoredProperties, mapExtraPropertiesAttribute.IgnoredProperties,

Loading…
Cancel
Save