Skip to content

Commit bcac95b

Browse files
rjpereshazzik
authored andcommitted
NH-2823
1 parent eb44257 commit bcac95b

File tree

7 files changed

+64
-0
lines changed

7 files changed

+64
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using NHibernate.Cfg.MappingSchema;
2+
using NHibernate.Mapping.ByCode;
3+
using NUnit.Framework;
4+
using SharpTestsEx;
5+
6+
namespace NHibernate.Test.MappingByCode.ExplicitMappingTests
7+
{
8+
[TestFixture]
9+
public class OptimisticLockModeTests
10+
{
11+
private class MyClass
12+
{
13+
public int Id { get; set; }
14+
public int Version { get; set; }
15+
}
16+
17+
[Test]
18+
public void OptimisticLockModeTest()
19+
{
20+
//NH-2823
21+
var mapper = new ModelMapper();
22+
mapper.Class<MyClass>(
23+
map =>
24+
{
25+
map.Id(x => x.Id, idmap => { });
26+
map.OptimisticLock(OptimisticLockMode.Dirty);
27+
});
28+
29+
var mappings = mapper.CompileMappingForAllExplicitlyAddedEntities();
30+
Assert.AreEqual(mappings.RootClasses[0].optimisticlock, HbmOptimisticLockMode.Dirty);
31+
}
32+
}
33+
}

src/NHibernate.Test/NHibernate.Test.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,7 @@
588588
<Compile Include="MappingByCode\ExplicitMappingTests\PoidTests.cs" />
589589
<Compile Include="MappingByCode\ExplicitMappingTests\RootClassPropertiesSplitsTests.cs" />
590590
<Compile Include="MappingByCode\ExplicitMappingTests\SubclassPropertiesSplitsTests.cs" />
591+
<Compile Include="MappingByCode\ExplicitMappingTests\OptimisticLockModeTests.cs" />
591592
<Compile Include="MappingByCode\ExplicitMappingTests\VersionTests.cs" />
592593
<Compile Include="MappingByCode\For.cs" />
593594
<Compile Include="MappingByCode\GeneratorTests.cs" />

src/NHibernate/Mapping/ByCode/IClassMapper.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public interface IClassAttributesMapper : IEntityAttributesMapper, IEntitySqlsMa
2727
void Where(string whereClause);
2828
void SchemaAction(SchemaAction action);
2929
void Polymorphism(PolymorphismType type);
30+
void OptimisticLock(OptimisticLockMode mode);
3031
}
3132

3233
public interface IClassMapper : IClassAttributesMapper, IPropertyContainerMapper
@@ -67,6 +68,7 @@ public interface IClassAttributesMapper<TEntity> : IEntityAttributesMapper, IEnt
6768
void Where(string whereClause);
6869
void SchemaAction(SchemaAction action);
6970
void Polymorphism(PolymorphismType type);
71+
void OptimisticLock(OptimisticLockMode mode);
7072
}
7173

7274
public interface IClassMapper<TEntity> : IClassAttributesMapper<TEntity>, IPropertyContainerMapper<TEntity> where TEntity : class

src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ public Dictionary<string, IJoinMapper> JoinMappers
5959
}
6060

6161
#region Implementation of IClassMapper
62+
public void OptimisticLock(OptimisticLockMode mode)
63+
{
64+
classMapping.optimisticlock = (HbmOptimisticLockMode)Enum.Parse(typeof(OptimisticLockMode), mode.ToString());
65+
}
6266

6367
public void Id(Action<IIdMapper> mapper)
6468
{

src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ClassCustomizer.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ private Dictionary<string, IJoinMapper<TEntity>> JoinCustomizers
3030

3131
#region Implementation of IClassAttributesMapper<TEntity>
3232

33+
public void OptimisticLock(OptimisticLockMode mode)
34+
{
35+
CustomizersHolder.AddCustomizer(typeof(TEntity), (IClassMapper m) => m.OptimisticLock(mode));
36+
}
37+
3338
public void Id<TProperty>(Expression<Func<TEntity, TProperty>> idProperty)
3439
{
3540
Id(idProperty, x => { });
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
6+
namespace NHibernate.Mapping.ByCode
7+
{
8+
public enum OptimisticLockMode
9+
{
10+
None,
11+
12+
Version,
13+
14+
Dirty,
15+
16+
All,
17+
}
18+
}

src/NHibernate/NHibernate.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,7 @@
353353
<Compile Include="Mapping\ByCode\Impl\CustomizersImpl\ManyToAnyCustomizer.cs" />
354354
<Compile Include="Mapping\ByCode\Impl\DynamicComponentMapper.cs" />
355355
<Compile Include="Mapping\ByCode\Impl\ManyToAnyMapper.cs" />
356+
<Compile Include="Mapping\ByCode\OptimisticLockMode.cs" />
356357
<Compile Include="Mapping\ByCode\Import.cs" />
357358
<Compile Include="Mapping\ByCode\PolymorphismType.cs" />
358359
<Compile Include="Mapping\ByCode\PropertyGeneration.cs" />

0 commit comments

Comments
 (0)