From b8eee5f2539cd7578f471176a2462f2b15d4e3a1 Mon Sep 17 00:00:00 2001 From: Banias Date: Sat, 9 Jul 2016 00:55:22 +0200 Subject: [PATCH 1/4] Added join support for Automapping overrides in SubClasses --- .../Automapping/OverrideSpecs.cs | 32 ++++++++++++++++++- .../Automapping/AutoMapping.cs | 10 ++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs b/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs index f9dabe16d..3853b88b2 100644 --- a/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs +++ b/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs @@ -1,6 +1,9 @@ -using System.Linq; +using System.Collections; +using System.Collections.Generic; +using System.Linq; using FluentNHibernate.Automapping; using FluentNHibernate.Automapping.Alterations; +using FluentNHibernate.MappingModel; using FluentNHibernate.MappingModel.ClassBased; using FluentNHibernate.Specs.Automapping.Fixtures; using FluentNHibernate.Specs.Automapping.Fixtures.Overrides; @@ -33,6 +36,33 @@ public class when_using_an_automapping_override_to_create_a_join static ClassMapping mapping; } + + public class when_using_an_automapping_override_to_specify_a_discriminators_and_join_on_subclass + { + private Establish context = () => + model = AutoMap.Source(new StubTypeSource(typeof (Parent), typeof (Child))) + .Override(map => + map.DiscriminateSubClassesOnColumn("type")) + .Override(map => map.Join("table", part => { })); + + private Because of = () => + mapping = model.BuildMappingFor(); + + + + It should_not_create_the_join_mapping = () => + mapping.Joins.ShouldBeEmpty(); + + It should_map_the_discriminator = () => + mapping.Discriminator.ShouldNotBeNull(); + + It should_map_subclasses_as_joined_subclasses = () => + mapping.Subclasses.ShouldEachConformTo(x => x.Joins.Any()); + + static AutoPersistenceModel model; + static ClassMapping mapping; + } + public class when_using_an_automapping_override_to_specify_a_discriminator { Establish context = () => diff --git a/src/FluentNHibernate/Automapping/AutoMapping.cs b/src/FluentNHibernate/Automapping/AutoMapping.cs index 43fb707dc..56fb18836 100644 --- a/src/FluentNHibernate/Automapping/AutoMapping.cs +++ b/src/FluentNHibernate/Automapping/AutoMapping.cs @@ -67,6 +67,16 @@ void IAutoClasslike.AlterModel(ClassMappingBase mapping) classMapping.Set(x => x.Tuplizer, Layer.Defaults, providers.TuplizerMapping); } + foreach (var join in providers.Joins) + { + var joinMapping = join.GetJoinMapping(); + + if(mapping.Joins.All(x => x.TableName != joinMapping.TableName)) + { + mapping.AddJoin(joinMapping); + } + } + foreach (var property in providers.Properties) mapping.AddOrReplaceProperty(property.GetPropertyMapping()); From 200b5e1c4b7b2520149abab5636a4e1310d45acb Mon Sep 17 00:00:00 2001 From: Banias Date: Sat, 9 Jul 2016 01:10:26 +0200 Subject: [PATCH 2/4] removed accidentally added usigns --- src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs b/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs index 3853b88b2..c8b7faea6 100644 --- a/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs +++ b/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs @@ -1,9 +1,6 @@ -using System.Collections; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using FluentNHibernate.Automapping; using FluentNHibernate.Automapping.Alterations; -using FluentNHibernate.MappingModel; using FluentNHibernate.MappingModel.ClassBased; using FluentNHibernate.Specs.Automapping.Fixtures; using FluentNHibernate.Specs.Automapping.Fixtures.Overrides; From 4cb1924e3dbe04636d6a757d21fe67c99b439d36 Mon Sep 17 00:00:00 2001 From: Banias Date: Sat, 9 Jul 2016 01:40:14 +0200 Subject: [PATCH 3/4] Deleted unnecessary adding joins for ClassMap overrides --- src/FluentNHibernate/Automapping/AutoMapping.cs | 12 +----------- .../MappingModel/ClassBased/ClassMappingBase.cs | 5 +++++ src/FluentNHibernate/MappingModel/MappedMembers.cs | 6 ++++++ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/FluentNHibernate/Automapping/AutoMapping.cs b/src/FluentNHibernate/Automapping/AutoMapping.cs index 56fb18836..9e20d02e8 100644 --- a/src/FluentNHibernate/Automapping/AutoMapping.cs +++ b/src/FluentNHibernate/Automapping/AutoMapping.cs @@ -61,21 +61,11 @@ void IAutoClasslike.AlterModel(ClassMappingBase mapping) if (Cache.IsDirty) classMapping.Set(x => x.Cache, Layer.Defaults, ((ICacheMappingProvider)Cache).GetCacheMapping()); - foreach (var join in providers.Joins) - classMapping.AddJoin(join.GetJoinMapping()); - classMapping.Set(x => x.Tuplizer, Layer.Defaults, providers.TuplizerMapping); } foreach (var join in providers.Joins) - { - var joinMapping = join.GetJoinMapping(); - - if(mapping.Joins.All(x => x.TableName != joinMapping.TableName)) - { - mapping.AddJoin(joinMapping); - } - } + mapping.AddOrReplaceJoin(join.GetJoinMapping()); foreach (var property in providers.Properties) mapping.AddOrReplaceProperty(property.GetPropertyMapping()); diff --git a/src/FluentNHibernate/MappingModel/ClassBased/ClassMappingBase.cs b/src/FluentNHibernate/MappingModel/ClassBased/ClassMappingBase.cs index fa8c8be40..cf1934404 100644 --- a/src/FluentNHibernate/MappingModel/ClassBased/ClassMappingBase.cs +++ b/src/FluentNHibernate/MappingModel/ClassBased/ClassMappingBase.cs @@ -146,6 +146,11 @@ public void AddJoin(JoinMapping mapping) mappedMembers.AddJoin(mapping); } + public void AddOrReplaceJoin(JoinMapping mapping) + { + mappedMembers.AddOrReplaceJoin(mapping); + } + public void AddFilter(FilterMapping mapping) { mappedMembers.AddFilter(mapping); diff --git a/src/FluentNHibernate/MappingModel/MappedMembers.cs b/src/FluentNHibernate/MappingModel/MappedMembers.cs index cbd750515..53051eac9 100644 --- a/src/FluentNHibernate/MappingModel/MappedMembers.cs +++ b/src/FluentNHibernate/MappingModel/MappedMembers.cs @@ -177,6 +177,12 @@ public void AddJoin(JoinMapping mapping) joins.Add(mapping); } + public void AddOrReplaceJoin(JoinMapping mapping) + { + joins.RemoveAll(x => x.TableName == mapping.TableName); + joins.Add(mapping); + } + public void AddFilter(FilterMapping mapping) { if (filters.Exists(x => x.Name == mapping.Name)) From 7a2dbcde907b269b171aaa480a09f65cf640324f Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Sat, 19 Sep 2020 08:30:40 +1200 Subject: [PATCH 4/4] Fix after merge --- src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs | 9 +++------ src/FluentNHibernate/MappingModel/MappedMembers.cs | 3 +-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs b/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs index 775832ddc..cf93e87c7 100644 --- a/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs +++ b/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs @@ -34,7 +34,6 @@ public class when_using_an_automapping_override_to_create_a_join static ClassMapping mapping; } - public class when_using_an_automapping_override_to_specify_a_discriminators_and_join_on_subclass { private Establish context = () => @@ -45,17 +44,15 @@ public class when_using_an_automapping_override_to_specify_a_discriminators_and_ private Because of = () => mapping = model.BuildMappingFor(); - - It should_not_create_the_join_mapping = () => - mapping.Joins.ShouldBeEmpty(); + mapping.Joins.Should().BeEmpty(); It should_map_the_discriminator = () => - mapping.Discriminator.ShouldNotBeNull(); + mapping.Discriminator.Should().NotBeNull(); It should_map_subclasses_as_joined_subclasses = () => - mapping.Subclasses.ShouldEachConformTo(x => x.Joins.Any()); + mapping.Subclasses.Should().OnlyContain(x => x.Joins.Any()); static AutoPersistenceModel model; static ClassMapping mapping; diff --git a/src/FluentNHibernate/MappingModel/MappedMembers.cs b/src/FluentNHibernate/MappingModel/MappedMembers.cs index ace04e989..a386e8154 100644 --- a/src/FluentNHibernate/MappingModel/MappedMembers.cs +++ b/src/FluentNHibernate/MappingModel/MappedMembers.cs @@ -134,8 +134,7 @@ public void AddJoin(JoinMapping mapping) public void AddOrReplaceJoin(JoinMapping mapping) { - joins.RemoveAll(x => x.TableName == mapping.TableName); - joins.Add(mapping); + AddOrReplaceMapping(mapping, MappingType.Join, x => x.TableName == mapping.TableName); } public void AddFilter(FilterMapping mapping)