From: <fab...@us...> - 2011-05-09 22:19:25
|
Revision: 5805 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5805&view=rev Author: fabiomaulo Date: 2011-05-09 22:19:18 +0000 (Mon, 09 May 2011) Log Message: ----------- Passing test for NH-2100 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ConventionModelMapper.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Domain.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Fixture.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ConventionModelMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ConventionModelMapper.cs 2011-05-09 21:20:24 UTC (rev 5804) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ConventionModelMapper.cs 2011-05-09 22:19:18 UTC (rev 5805) @@ -29,14 +29,19 @@ BeforeMapComponent += ComponentParentNoSetterToField; BeforeMapBag += MemberToFieldAccessor; + BeforeMapIdBag += MemberToFieldAccessor; BeforeMapSet += MemberToFieldAccessor; BeforeMapMap += MemberToFieldAccessor; BeforeMapList += MemberToFieldAccessor; + BeforeMapBag += MemberNoSetterToField; + BeforeMapIdBag += MemberNoSetterToField; BeforeMapSet += MemberNoSetterToField; BeforeMapMap += MemberNoSetterToField; BeforeMapList += MemberNoSetterToField; + BeforeMapBag += MemberReadOnlyAccessor; + BeforeMapIdBag += MemberReadOnlyAccessor; BeforeMapSet += MemberReadOnlyAccessor; BeforeMapMap += MemberReadOnlyAccessor; BeforeMapList += MemberReadOnlyAccessor; Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Domain.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Domain.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Domain.cs 2011-05-09 22:19:18 UTC (rev 5805) @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace NHibernate.Test.NHSpecificTest.NH2100 +{ + public abstract class DomainObject + { + public virtual int ID { get; set; } + public virtual int EntityVersion { get; set; } + } + + public class Class1 : DomainObject + { + private readonly IList<Class2> _class2List = new List<Class2>(); + + public virtual void AddClass2(Class2 toAdd) + { + if (false == _class2List.Contains(toAdd)) + { + _class2List.Add(toAdd); + toAdd.AddClass1(this); + } + } + + public virtual ReadOnlyCollection<Class2> Class2List + { + get { return new ReadOnlyCollection<Class2>(_class2List); } + } + } + + public class Class1DTO : DTO + { + public Class2DTO[] Class2Ary { get; set; } + } + + /// <summary> + /// RG + /// </summary> + public class Class2 : DomainObject + { + private readonly IList<Class1> _class1List = new List<Class1>(); + + public virtual void AddClass1(Class1 toAdd) + { + if (false == _class1List.Contains(toAdd)) + { + _class1List.Add(toAdd); + toAdd.AddClass2(this); + } + } + } + + public class Class2DTO : DTO { } + + public abstract class DTO + { + public int ID; + public int EntityVersion; + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Fixture.cs 2011-05-09 22:19:18 UTC (rev 5805) @@ -0,0 +1,121 @@ +using System; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2100 +{ + public class Fixture : TestCaseMappingByCode + { + protected override HbmMapping GetMappings() + { + var mapper = new ConventionModelMapper(); + System.Type baseEntityType = typeof (DomainObject); + mapper.IsEntity((t, declared) => baseEntityType.IsAssignableFrom(t) && !baseEntityType.Equals(t)); + mapper.IsRootEntity((t, declared) => baseEntityType.Equals(t.BaseType)); + mapper.Class<DomainObject>(r => + { + r.Version(x => x.EntityVersion, map => { }); + r.Id(x => x.ID, map => map.Generator(Generators.Native)); + }); + mapper.Class<Class1>(r => { r.IdBag(x => x.Class2List, map => map.Inverse(true), rel => rel.ManyToMany()); }); + mapper.Class<Class2>(r => { r.IdBag<Class1>("_class1List", map => { }, rel => rel.ManyToMany()); }); + HbmMapping mappings = mapper.CompileMappingFor(new[] {typeof (Class1), typeof (Class2)}); + Console.WriteLine(mappings.AsString()); + return mappings; + } + + [Test] + public void WhenTwoTransactionInSameSessionThenNotChangeVersion() + { + // the second transaction does not change the entity state + Class1 c1_1; + Class1 c1_2; + Class2 c2_1; + Class2 c2_2; + int originalVersionC1_1; + int originalVersionC1_2; + int originalVersionC2_1; + int originalVersionC2_2; + c1_1 = new Class1(); + c1_2 = new Class1(); + + c2_1 = new Class2(); + c2_2 = new Class2(); + + c1_1.AddClass2(c2_1); + c1_2.AddClass2(c2_2); + using (ISession s = OpenSession()) + { + using (ITransaction tx = s.BeginTransaction()) + { + s.Save(c2_1); + s.Save(c1_1); + s.Save(c2_2); + s.Save(c1_2); + tx.Commit(); + } + originalVersionC1_1 = c1_1.EntityVersion; + originalVersionC1_2 = c1_2.EntityVersion; + originalVersionC2_1 = c2_1.EntityVersion; + originalVersionC2_2 = c2_2.EntityVersion; + + using (ITransaction tx = s.BeginTransaction()) + { + s.Refresh(c1_1); // The addition of these two Refresh calls fixes the entity version issue + s.Refresh(c1_2); + + var class1dto = + new Class1DTO {ID = c1_1.ID, EntityVersion = c1_1.EntityVersion}; + + if (c1_1.Class2List.Count > 0) + { + class1dto.Class2Ary = new Class2DTO[c1_1.Class2List.Count]; + for (int i = 0; i < c1_1.Class2List.Count; ++i) + { + Class2 cl2 = c1_1.Class2List[i]; + class1dto.Class2Ary[i] = new Class2DTO {ID = cl2.ID, EntityVersion = cl2.EntityVersion}; + } + } + + tx.Commit(); + } + // After close the second transaction the version was not changed + c1_1.EntityVersion.Should().Be(originalVersionC1_1); + c1_2.EntityVersion.Should().Be(originalVersionC1_2); + c2_1.EntityVersion.Should().Be(originalVersionC2_1); + c2_2.EntityVersion.Should().Be(originalVersionC2_2); + } + + // After close the session the version was not changed + c1_1.EntityVersion.Should().Be(originalVersionC1_1); + c1_2.EntityVersion.Should().Be(originalVersionC1_2); + c2_1.EntityVersion.Should().Be(originalVersionC2_1); + c2_2.EntityVersion.Should().Be(originalVersionC2_2); + + using (ISession s = OpenSession()) + { + using (ITransaction tx = s.BeginTransaction()) + { + c2_1 = s.Get<Class2>(c2_1.ID); + c1_1 = s.Get<Class1>(c1_1.ID); + c2_2 = s.Get<Class2>(c2_2.ID); + c1_2 = s.Get<Class1>(c1_2.ID); + + // to be 100% sure the version was not changed in DB + c1_1.EntityVersion.Should().Be(originalVersionC1_1); + c1_2.EntityVersion.Should().Be(originalVersionC1_2); + c2_1.EntityVersion.Should().Be(originalVersionC2_1); + c2_2.EntityVersion.Should().Be(originalVersionC2_2); + + s.Delete(c2_1); + s.Delete(c1_1); + s.Delete(c2_2); + s.Delete(c1_2); + tx.Commit(); + } + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-09 21:20:24 UTC (rev 5804) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-09 22:19:18 UTC (rev 5805) @@ -662,6 +662,8 @@ <Compile Include="NHSpecificTest\NH2043\Domain.cs" /> <Compile Include="NHSpecificTest\NH2043\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2056\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2100\Domain.cs" /> + <Compile Include="NHSpecificTest\NH2100\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2111\A.cs" /> <Compile Include="NHSpecificTest\NH2111\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2112\Fixture.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |