diff --git a/src/NHibernate.Test/MappingByCode/ExplicitMappingTests/OptimisticLockModeTests.cs b/src/NHibernate.Test/MappingByCode/ExplicitMappingTests/OptimisticLockModeTests.cs new file mode 100644 index 00000000000..5d18dccfa59 --- /dev/null +++ b/src/NHibernate.Test/MappingByCode/ExplicitMappingTests/OptimisticLockModeTests.cs @@ -0,0 +1,33 @@ +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode.ExplicitMappingTests +{ + [TestFixture] + public class OptimisticLockModeTests + { + private class MyClass + { + public int Id { get; set; } + public int Version { get; set; } + } + + [Test] + public void OptimisticLockModeTest() + { + //NH-2823 + var mapper = new ModelMapper(); + mapper.Class( + map => + { + map.Id(x => x.Id, idmap => { }); + map.OptimisticLock(OptimisticLockMode.Dirty); + }); + + var mappings = mapper.CompileMappingForAllExplicitlyAddedEntities(); + Assert.AreEqual(mappings.RootClasses[0].optimisticlock, HbmOptimisticLockMode.Dirty); + } + } +} \ No newline at end of file diff --git a/src/NHibernate.Test/NHibernate.Test.csproj b/src/NHibernate.Test/NHibernate.Test.csproj index 069221382f3..f6eee9f1b07 100644 --- a/src/NHibernate.Test/NHibernate.Test.csproj +++ b/src/NHibernate.Test/NHibernate.Test.csproj @@ -588,6 +588,7 @@ + diff --git a/src/NHibernate/Mapping/ByCode/IClassMapper.cs b/src/NHibernate/Mapping/ByCode/IClassMapper.cs index 60defe318a6..b472db56cc2 100644 --- a/src/NHibernate/Mapping/ByCode/IClassMapper.cs +++ b/src/NHibernate/Mapping/ByCode/IClassMapper.cs @@ -27,6 +27,7 @@ public interface IClassAttributesMapper : IEntityAttributesMapper, IEntitySqlsMa void Where(string whereClause); void SchemaAction(SchemaAction action); void Polymorphism(PolymorphismType type); + void OptimisticLock(OptimisticLockMode mode); } public interface IClassMapper : IClassAttributesMapper, IPropertyContainerMapper @@ -67,6 +68,7 @@ public interface IClassAttributesMapper : IEntityAttributesMapper, IEnt void Where(string whereClause); void SchemaAction(SchemaAction action); void Polymorphism(PolymorphismType type); + void OptimisticLock(OptimisticLockMode mode); } 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 dfd17f13a2d..2bfc5cdf439 100644 --- a/src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs +++ b/src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs @@ -59,6 +59,10 @@ public Dictionary JoinMappers } #region Implementation of IClassMapper + public void OptimisticLock(OptimisticLockMode mode) + { + classMapping.optimisticlock = (HbmOptimisticLockMode)Enum.Parse(typeof(OptimisticLockMode), mode.ToString()); + } public void Id(Action mapper) { diff --git a/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ClassCustomizer.cs b/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ClassCustomizer.cs index fdd2c330135..4c398928811 100644 --- a/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ClassCustomizer.cs +++ b/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ClassCustomizer.cs @@ -30,6 +30,11 @@ private Dictionary> JoinCustomizers #region Implementation of IClassAttributesMapper + public void OptimisticLock(OptimisticLockMode mode) + { + CustomizersHolder.AddCustomizer(typeof(TEntity), (IClassMapper m) => m.OptimisticLock(mode)); + } + public void Id(Expression> idProperty) { Id(idProperty, x => { }); diff --git a/src/NHibernate/Mapping/ByCode/OptimisticLockMode.cs b/src/NHibernate/Mapping/ByCode/OptimisticLockMode.cs new file mode 100644 index 00000000000..58e41f30d7e --- /dev/null +++ b/src/NHibernate/Mapping/ByCode/OptimisticLockMode.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NHibernate.Mapping.ByCode +{ + public enum OptimisticLockMode + { + None, + + Version, + + Dirty, + + All, + } +} diff --git a/src/NHibernate/NHibernate.csproj b/src/NHibernate/NHibernate.csproj index 1cf454d984c..54fa348f4e2 100644 --- a/src/NHibernate/NHibernate.csproj +++ b/src/NHibernate/NHibernate.csproj @@ -353,6 +353,7 @@ +