From 77b9b7bb6973fb431ffc20dba35758993cb4ac97 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 12 Nov 2020 13:39:12 +1300 Subject: [PATCH] Remove usage of DeepClone DeepClone uses BinaryFormatter which is obsolete in .NET 5.0 and throws a PlatformNotSupportedException. The fix insures that columns are cloned instead of cloning the whole object Fixes #479 +semver: fix --- src/FluentNHibernate/Mapping/ComponentMap.cs | 4 +--- src/FluentNHibernate/Mapping/ElementPart.cs | 2 +- src/FluentNHibernate/Mapping/JoinedSubClassPart.cs | 2 +- src/FluentNHibernate/Mapping/ManyToManyPart.cs | 4 ++-- src/FluentNHibernate/Mapping/OneToManyPart.cs | 2 +- src/FluentNHibernate/Mapping/PropertyPart.cs | 2 +- src/FluentNHibernate/Mapping/SubclassMap.cs | 2 +- src/FluentNHibernate/Utils/Extensions.cs | 1 + 8 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/FluentNHibernate/Mapping/ComponentMap.cs b/src/FluentNHibernate/Mapping/ComponentMap.cs index 2b0e2cf8d..a5b6d9b6a 100644 --- a/src/FluentNHibernate/Mapping/ComponentMap.cs +++ b/src/FluentNHibernate/Mapping/ComponentMap.cs @@ -59,9 +59,7 @@ protected override ComponentMapping CreateComponentMappingRoot(AttributeStore st ExternalComponentMapping IExternalComponentMappingProvider.GetComponentMapping() { - var mapping = (ExternalComponentMapping)CreateComponentMapping(); - - return mapping.DeepClone(); + return (ExternalComponentMapping) CreateComponentMapping(); } Type IExternalComponentMappingProvider.Type diff --git a/src/FluentNHibernate/Mapping/ElementPart.cs b/src/FluentNHibernate/Mapping/ElementPart.cs index 56b93a15b..69acfa2c7 100644 --- a/src/FluentNHibernate/Mapping/ElementPart.cs +++ b/src/FluentNHibernate/Mapping/ElementPart.cs @@ -101,7 +101,7 @@ ElementMapping IElementMappingProvider.GetElementMapping() foreach (var column in Columns) { column.MergeAttributes(columnAttributes); - mapping.AddColumn(Layer.Defaults, column); + mapping.AddColumn(Layer.Defaults, column.Clone()); } return mapping; diff --git a/src/FluentNHibernate/Mapping/JoinedSubClassPart.cs b/src/FluentNHibernate/Mapping/JoinedSubClassPart.cs index 7d985e02e..f916f1092 100644 --- a/src/FluentNHibernate/Mapping/JoinedSubClassPart.cs +++ b/src/FluentNHibernate/Mapping/JoinedSubClassPart.cs @@ -143,7 +143,7 @@ SubclassMapping ISubclassMappingProvider.GetSubclassMapping() mapping.Set(x => x.Type, Layer.Defaults, typeof(TSubclass)); foreach (var column in columns) - mapping.Key.AddColumn(Layer.Defaults, column); + mapping.Key.AddColumn(Layer.Defaults, column.Clone()); foreach (var property in providers.Properties) mapping.AddProperty(property.GetPropertyMapping()); diff --git a/src/FluentNHibernate/Mapping/ManyToManyPart.cs b/src/FluentNHibernate/Mapping/ManyToManyPart.cs index 508e0b2d6..5ef3e5d4a 100644 --- a/src/FluentNHibernate/Mapping/ManyToManyPart.cs +++ b/src/FluentNHibernate/Mapping/ManyToManyPart.cs @@ -370,7 +370,7 @@ protected override CollectionMapping GetCollectionMapping() collection.Key.AddColumn(Layer.Defaults, new ColumnMapping(EntityType.Name + "_id")); foreach (var column in parentKeyColumns) - collection.Key.AddColumn(Layer.UserSupplied, column); + collection.Key.AddColumn(Layer.UserSupplied, column.Clone()); if (collection.Relationship != null) { @@ -379,7 +379,7 @@ protected override CollectionMapping GetCollectionMapping() ((ManyToManyMapping)collection.Relationship).AddColumn(Layer.Defaults, new ColumnMapping(typeof(TChild).Name + "_id")); foreach (var column in childKeyColumns) - ((ManyToManyMapping)collection.Relationship).AddColumn(Layer.UserSupplied, column); + ((ManyToManyMapping)collection.Relationship).AddColumn(Layer.UserSupplied, column.Clone()); } // HACK: Index only on list and map - shouldn't have to do this! diff --git a/src/FluentNHibernate/Mapping/OneToManyPart.cs b/src/FluentNHibernate/Mapping/OneToManyPart.cs index cbeedbce2..a579350a0 100644 --- a/src/FluentNHibernate/Mapping/OneToManyPart.cs +++ b/src/FluentNHibernate/Mapping/OneToManyPart.cs @@ -198,7 +198,7 @@ protected override CollectionMapping GetCollectionMapping() foreach (var column in keyColumns) { - collection.Key.AddColumn(Layer.UserSupplied, column); + collection.Key.AddColumn(Layer.UserSupplied, column.Clone()); } // HACK: shouldn't have to do this! diff --git a/src/FluentNHibernate/Mapping/PropertyPart.cs b/src/FluentNHibernate/Mapping/PropertyPart.cs index 38b15779b..6bc1450c1 100644 --- a/src/FluentNHibernate/Mapping/PropertyPart.cs +++ b/src/FluentNHibernate/Mapping/PropertyPart.cs @@ -332,7 +332,7 @@ PropertyMapping IPropertyMappingProvider.GetPropertyMapping() } foreach (var column in columns) - mapping.AddColumn(Layer.UserSupplied, column); + mapping.AddColumn(Layer.UserSupplied, column.Clone()); foreach (var column in mapping.Columns) { diff --git a/src/FluentNHibernate/Mapping/SubclassMap.cs b/src/FluentNHibernate/Mapping/SubclassMap.cs index 4fd0f11dd..d37795c19 100644 --- a/src/FluentNHibernate/Mapping/SubclassMap.cs +++ b/src/FluentNHibernate/Mapping/SubclassMap.cs @@ -345,7 +345,7 @@ SubclassMapping IIndeterminateSubclassMappingProvider.GetSubclassMapping(Subclas } } - return mapping.DeepClone(); + return mapping; } Type IIndeterminateSubclassMappingProvider.EntityType diff --git a/src/FluentNHibernate/Utils/Extensions.cs b/src/FluentNHibernate/Utils/Extensions.cs index 76cbd7e04..b21a1dcde 100644 --- a/src/FluentNHibernate/Utils/Extensions.cs +++ b/src/FluentNHibernate/Utils/Extensions.cs @@ -66,6 +66,7 @@ public static bool HasInterface(this Type type, Type interfaceType) return type.GetInterfaces().Contains(interfaceType); } + [Obsolete("Please do not use this method. It will be removed in a future version.")] public static T DeepClone(this T obj) { using (var stream = new MemoryStream())