|
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.
|