From 33bd219168b44d1745819d7a8aa8dfb07986ac14 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Tue, 2 Apr 2024 16:20:25 +1000 Subject: [PATCH] Fix overriding Id for automapping (#671) Fixes #431 +semver:fix --- .../Fixtures/EntityWithDifferentId.cs | 9 +++++++ .../Automapping/OverrideSpecs.cs | 24 +++++++++++++++++++ .../Automapping/AutoMapping.cs | 14 +++++------ 3 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 src/FluentNHibernate.Specs/Automapping/Fixtures/EntityWithDifferentId.cs diff --git a/src/FluentNHibernate.Specs/Automapping/Fixtures/EntityWithDifferentId.cs b/src/FluentNHibernate.Specs/Automapping/Fixtures/EntityWithDifferentId.cs new file mode 100644 index 000000000..dc9f3488d --- /dev/null +++ b/src/FluentNHibernate.Specs/Automapping/Fixtures/EntityWithDifferentId.cs @@ -0,0 +1,9 @@ +using System; + +namespace FluentNHibernate.Specs.Automapping.Fixtures; + +public class EntityWithDifferentId +{ + public virtual int DestinationId { get; set; } + public virtual Guid Id { get; set; } +} diff --git a/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs b/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs index a93c82ef9..ccb10dd80 100644 --- a/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs +++ b/src/FluentNHibernate.Specs/Automapping/OverrideSpecs.cs @@ -8,6 +8,7 @@ using FluentNHibernate.Specs.ExternalFixtures.Overrides; using Machine.Specifications; using FluentAssertions; +using FluentNHibernate.MappingModel.Identity; namespace FluentNHibernate.Specs.Automapping; @@ -81,6 +82,29 @@ public class when_using_an_automapping_override_to_specify_a_discriminator static ClassMapping mapping; } +public class when_using_an_automapping_override_to_specify_a_different_id +{ + Establish context = () => + model = AutoMap.Source(new StubTypeSource(typeof(EntityWithDifferentId))) + .Override(map => + map.Id(x => x.DestinationId)); + + Because of = () => + mapping = model.BuildMappingFor(); + + It should_map_the_id = () => + mapping.Id.Should().NotBeNull(); + + It should_map_id_as_id_mapping = () => + mapping.Id.Should().BeOfType(); + + It should_map_id_as_different_id = () => + ((IdMapping)mapping.Id).Name.Should().Be("DestinationId"); + + static AutoPersistenceModel model; + static ClassMapping mapping; +} + [Subject(typeof(IAutoMappingOverride<>))] public class when_using_multiple_overrides_from_different_assemblies { diff --git a/src/FluentNHibernate/Automapping/AutoMapping.cs b/src/FluentNHibernate/Automapping/AutoMapping.cs index 7afe006d1..afa0c6f99 100644 --- a/src/FluentNHibernate/Automapping/AutoMapping.cs +++ b/src/FluentNHibernate/Automapping/AutoMapping.cs @@ -42,24 +42,24 @@ void IAutoClasslike.AlterModel(ClassMappingBase mapping) if (mapping is ClassMapping classMapping) { if (providers.Id is not null) - classMapping.Set(x => x.Id, Layer.Defaults, providers.Id.GetIdentityMapping()); + classMapping.Set(x => x.Id, Layer.UserSupplied, providers.Id.GetIdentityMapping()); if (providers.NaturalId is not null) - classMapping.Set(x => x.NaturalId, Layer.Defaults, providers.NaturalId.GetNaturalIdMapping()); + classMapping.Set(x => x.NaturalId, Layer.UserSupplied, providers.NaturalId.GetNaturalIdMapping()); if (providers.CompositeId is not null) - classMapping.Set(x => x.Id, Layer.Defaults, providers.CompositeId.GetCompositeIdMapping()); + classMapping.Set(x => x.Id, Layer.UserSupplied, providers.CompositeId.GetCompositeIdMapping()); if (providers.Version is not null) - classMapping.Set(x => x.Version, Layer.Defaults, providers.Version.GetVersionMapping()); + classMapping.Set(x => x.Version, Layer.UserSupplied, providers.Version.GetVersionMapping()); if (providers.Discriminator is not null) - classMapping.Set(x => x.Discriminator, Layer.Defaults, providers.Discriminator.GetDiscriminatorMapping()); + classMapping.Set(x => x.Discriminator, Layer.UserSupplied, providers.Discriminator.GetDiscriminatorMapping()); if (Cache.IsDirty) - classMapping.Set(x => x.Cache, Layer.Defaults, ((ICacheMappingProvider)Cache).GetCacheMapping()); + classMapping.Set(x => x.Cache, Layer.UserSupplied, ((ICacheMappingProvider)Cache).GetCacheMapping()); - classMapping.Set(x => x.Tuplizer, Layer.Defaults, providers.TuplizerMapping); + classMapping.Set(x => x.Tuplizer, Layer.UserSupplied, providers.TuplizerMapping); } foreach (var join in providers.Joins)