diff --git a/src/NHibernate.Test/MappingByCode/IntegrationTests/NH3110/Fixture.cs b/src/NHibernate.Test/MappingByCode/IntegrationTests/NH3110/Fixture.cs new file mode 100644 index 00000000000..4a1a1b405ce --- /dev/null +++ b/src/NHibernate.Test/MappingByCode/IntegrationTests/NH3110/Fixture.cs @@ -0,0 +1,26 @@ +using System.Linq; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode; +using NUnit.Framework; + +namespace NHibernate.Test.MappingByCode.IntegrationTests.NH3110 +{ + [TestFixture] + public class Fixture + { + [Test] + public void CanSetPolymorphism() + { + var mapper = new ModelMapper(); + mapper.Class(rc => + { + rc.Polymorphism(PolymorphismType.Explicit); + }); + + var mapping = mapper.CompileMappingForAllExplicitlyAddedEntities(); + + var entity = mapping.RootClasses[0]; + Assert.AreEqual(entity.polymorphism, HbmPolymorphismType.Explicit); + } + } +} \ No newline at end of file diff --git a/src/NHibernate.Test/NHibernate.Test.csproj b/src/NHibernate.Test/NHibernate.Test.csproj index ad6d1b9ca10..069221382f3 100644 --- a/src/NHibernate.Test/NHibernate.Test.csproj +++ b/src/NHibernate.Test/NHibernate.Test.csproj @@ -605,6 +605,7 @@ + diff --git a/src/NHibernate/Mapping/ByCode/IClassMapper.cs b/src/NHibernate/Mapping/ByCode/IClassMapper.cs index 80304061f67..60defe318a6 100644 --- a/src/NHibernate/Mapping/ByCode/IClassMapper.cs +++ b/src/NHibernate/Mapping/ByCode/IClassMapper.cs @@ -1,6 +1,7 @@ using System; using System.Linq.Expressions; using System.Reflection; +using NHibernate.Cfg.MappingSchema; namespace NHibernate.Mapping.ByCode { @@ -25,6 +26,7 @@ public interface IClassAttributesMapper : IEntityAttributesMapper, IEntitySqlsMa void Filter(string filterName, Action filterMapping); void Where(string whereClause); void SchemaAction(SchemaAction action); + void Polymorphism(PolymorphismType type); } public interface IClassMapper : IClassAttributesMapper, IPropertyContainerMapper @@ -64,6 +66,7 @@ public interface IClassAttributesMapper : IEntityAttributesMapper, IEnt void Filter(string filterName, Action filterMapping); void Where(string whereClause); void SchemaAction(SchemaAction action); + void Polymorphism(PolymorphismType type); } public interface IClassMapper : IClassAttributesMapper, IPropertyContainerMapper where TEntity : class diff --git a/src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs b/src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs index 6c1d4916031..dfd17f13a2d 100644 --- a/src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs +++ b/src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs @@ -256,6 +256,10 @@ public void Join(string splitGroupId, Action splitMapping) splitMapping(splitGroup); } + public void Polymorphism(PolymorphismType type) + { + classMapping.polymorphism = (HbmPolymorphismType) Enum.Parse(typeof(HbmPolymorphismType), type.ToString()); + } #endregion #region Implementation of IEntityAttributesMapper diff --git a/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ClassCustomizer.cs b/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ClassCustomizer.cs index 4b25dfd56e5..fdd2c330135 100644 --- a/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ClassCustomizer.cs +++ b/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ClassCustomizer.cs @@ -116,6 +116,11 @@ public void Schema(string schemaName) CustomizersHolder.AddCustomizer(typeof(TEntity), (IClassMapper m) => m.Schema(schemaName)); } + public void Polymorphism(PolymorphismType type) + { + CustomizersHolder.AddCustomizer(typeof(TEntity), (IClassMapper m) => m.Polymorphism(type)); + } + #endregion #region Implementation of IEntityAttributesMapper diff --git a/src/NHibernate/Mapping/ByCode/PolymorphismType.cs b/src/NHibernate/Mapping/ByCode/PolymorphismType.cs new file mode 100644 index 00000000000..a1450974677 --- /dev/null +++ b/src/NHibernate/Mapping/ByCode/PolymorphismType.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NHibernate.Mapping.ByCode +{ + /// + /// The possible types of polymorphism for IClassMapper. + /// + public enum PolymorphismType + { + /// + /// Implicit polymorphism + /// + Implicit, + + /// + /// Explicit polymorphism + /// + Explicit + } +} diff --git a/src/NHibernate/NHibernate.csproj b/src/NHibernate/NHibernate.csproj index b399d058ce9..1cf454d984c 100644 --- a/src/NHibernate/NHibernate.csproj +++ b/src/NHibernate/NHibernate.csproj @@ -354,6 +354,7 @@ +