From: <fab...@us...> - 2009-06-03 04:22:52
|
Revision: 4403 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4403&view=rev Author: fabiomaulo Date: 2009-06-03 04:22:51 +0000 (Wed, 03 Jun 2009) Log Message: ----------- Example of tree Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/DomainClass.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/SampleTest.cs Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/DomainClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/DomainClass.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/DomainClass.cs 2009-06-03 04:22:51 UTC (rev 4403) @@ -0,0 +1,50 @@ +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.NH1531 +{ + public class Parent + { + private readonly IList<Child> _children = new List<Child>(); + + public int Id { get; set; } + + public IList<Child> Children + { + get { return _children; } + } + + public void AddNewChild() + { + var c = new Child {Name = "New Child", Parent = this}; + _children.Add(c); + } + + public void DetachAllChildren() + { + foreach (var c in _children) + { + c.Parent = null; + } + _children.Clear(); + } + + public void AttachNewChild(Child c) + { + if (c.Parent != null) + { + c.Parent.Children.Remove(c); + } + c.Parent = this; + _children.Add(c); + } + } + + public class Child + { + public int Id { get; set; } + + public string Name { get; set; } + + public Parent Parent { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/Mappings.hbm.xml 2009-06-03 04:22:51 UTC (rev 4403) @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH1531" + default-lazy="false"> + + <class name="Parent"> + <id name="Id"> + <generator class="assigned" /> + </id> + <bag name="Children" lazy="true" inverse="true" cascade="all" access="field.camelcase-underscore" > + <key column="ParentID" /> + <one-to-many class="Child"/> + </bag> + </class> + + + <class name="Child"> + <id name="Id"> + <generator class="assigned" /> + </id> + <property name="Name" column="Name" /> + <many-to-one name="Parent" column="ParentID" /> + </class> +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/SampleTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/SampleTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1531/SampleTest.cs 2009-06-03 04:22:51 UTC (rev 4403) @@ -0,0 +1,80 @@ +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1531 +{ + // This test is only an Example to show the wrong mapping in the original issue. + + [TestFixture] + public class SampleTest : BugTestCase + { + private void FillDb() + { + using (ISession session = OpenSession()) + { + var entity = new Parent {Id = 1}; + entity.AddNewChild(); + session.Save(entity); + + var entity2 = new Parent {Id = 2}; + session.Save(entity2); + + session.Flush(); + } + } + + private void CleanDb() + { + using (ISession session = OpenSession()) + { + session.Delete("from Parent"); + session.Flush(); + } + } + + [Test] + public void ReparentingShouldNotFail() + { + FillDb(); + using (ISession session = OpenSession()) + { + var parent1 = session.Get<Parent>(1); + var parent2 = session.Get<Parent>(2); + + Assert.AreEqual(1, parent1.Children.Count); + Assert.AreEqual(0, parent2.Children.Count); + + Child p1Child = parent1.Children[0]; + + Assert.IsNotNull(p1Child); + + parent1.DetachAllChildren(); + parent2.AttachNewChild(p1Child); + + session.SaveOrUpdate(parent1); + session.SaveOrUpdate(parent2); + + // NHibernate.ObjectDeletedException : + // deleted object would be re-saved by cascade (remove deleted object from associations)[NHibernate.Test.NHSpecificTest.NH1531.Child#0] + + session.Flush(); + } + + using (ISession session = OpenSession()) + { + // should exist only one child + var l = session.CreateQuery("from Child").List(); + Assert.That(l.Count, Is.EqualTo(1)); + } + CleanDb(); + } + + [Test] + public void DeleteParentDeleteChildInCascade() + { + FillDb(); + CleanDb(); + + // The TestCase is checking the empty db + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-06-02 23:09:13 UTC (rev 4402) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-06-03 04:22:51 UTC (rev 4403) @@ -364,6 +364,8 @@ <Compile Include="NHSpecificTest\NH1343\Product.cs" /> <Compile Include="NHSpecificTest\NH1343\ProductFixture.cs" /> <Compile Include="NHSpecificTest\NH1388\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH1531\DomainClass.cs" /> + <Compile Include="NHSpecificTest\NH1531\SampleTest.cs" /> <Compile Include="NHSpecificTest\NH1553\MsSQL\Person.cs" /> <Compile Include="NHSpecificTest\NH1553\MsSQL\SnapshotIsolationUpdateConflictTest.cs" /> <Compile Include="NHSpecificTest\NH1553\MsSQL\SQLUpdateConflictToStaleStateExceptionConverter.cs" /> @@ -1855,6 +1857,7 @@ <EmbeddedResource Include="CacheTest\EntityWithFilters.xml" /> <EmbeddedResource Include="Classic\EntityWithLifecycle.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1531\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1757\Mappings.hbm.xml" /> <EmbeddedResource Include="Events\PostEvents\SimpleEntity.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1789\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |