From: <fab...@us...> - 2011-08-07 19:08:35
|
Revision: 6002 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=6002&view=rev Author: fabiomaulo Date: 2011-08-07 19:08:28 +0000 (Sun, 07 Aug 2011) Log Message: ----------- Test for NH-2828 Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/Entities.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/Mappings.hbm.xml Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/Entities.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/Entities.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/Entities.cs 2011-08-07 19:08:28 UTC (rev 6002) @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; +using Iesi.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.NH2828 +{ + public class Company + { + public virtual Guid Id { get; protected set; } + + /// <summary> + /// The addresses. + /// </summary> + private readonly Iesi.Collections.Generic.ISet<Address> addresses; + + /// <summary> + /// The bank accounts. + /// </summary> + private readonly Iesi.Collections.Generic.ISet<BankAccount> bankAccounts; + + /// <summary> + /// Gets or sets Name. + /// </summary> + public virtual string Name { get; set; } + + public Company(){ + this.addresses = new HashedSet<Address>(); + this.bankAccounts = new HashedSet<BankAccount>(); + } + + /// <summary> + /// Gets or sets Addresses. + /// </summary> + public virtual IEnumerable<Address> Addresses + { + get + { + return this.addresses; + } + } + + /// <summary> + /// Gets or sets BankAccounts. + /// </summary> + public virtual IEnumerable<BankAccount> BankAccounts + { + get + { + return this.bankAccounts; + } + } + public virtual bool AddBank(BankAccount bankAccount) + { + if (bankAccount == null) + { + return false; + } + + if (this.bankAccounts.Add(bankAccount)) + { + bankAccount.Company = this; + return true; + } + return false; + } + + public virtual bool AddAddress(Address address) + { + if (address == null) + { + return false; + } + + if (this.addresses.Add(address)) + { + address.AddCompany(this); + return true; + } + return false; + } + + public virtual bool RemoveAddress(Address address) + { + if (address == null) + { + return false; + } + if (this.addresses.Remove(address)) + { + address.RemoveCompany(); + return true; + } + return false; + } + + } + + public class Address + { + public virtual Guid Id { get; protected set; } + + public virtual string Name { get; set; } + + public virtual Company Company { get; set; } + + public virtual bool AddCompany(Company company) + { + if (company == null) + { + return false; + } + + this.Company = company; + if (company.AddAddress(this)) return true; + return false; + } + + public virtual void RemoveCompany() + { + this.Company = null; + } + + } + + public class BankAccount + { + public virtual Guid Id { get; protected set; } + + public virtual string Name { get; set; } + + public virtual Company Company { get; set; } + + } + +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/Fixture.cs 2011-08-07 19:08:28 UTC (rev 6002) @@ -0,0 +1,69 @@ +using System; +using System.Linq; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2828 +{ + public class Fixture : BugTestCase + { + [Test, Ignore("Not fixed yet")] + public void WhenPersistShouldNotFetchUninitializedCollection() + { + var companyId = CreateScenario(); + + //Now in a second transaction i remove the address and persist Company: for a cascade option the Address will be removed + using (var sl = new SqlLogSpy()) + { + using (ISession session = sessions.OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + var company = session.Get<Company>(companyId); + company.Addresses.Count().Should().Be.EqualTo(1); + company.RemoveAddress(company.Addresses.First()).Should().Be.EqualTo(true); + + //now this company will be saved and deleting the address. + //BUT it should not try to load the BanckAccound collection! + session.Persist(company); + tx.Commit(); + } + } + var wholeMessage = sl.GetWholeLog(); + wholeMessage.Should().Not.Contain("BankAccount"); + } + + Cleanup(companyId); + } + + private void Cleanup(Guid companyId) + { + using (ISession session = sessions.OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + session.Delete(session.Get<Company>(companyId)); + tx.Commit(); + } + } + } + + private Guid CreateScenario() + { + var company = new Company() {Name = "Company test"}; + var address = new Address() {Name = "Address test"}; + var bankAccount = new BankAccount() {Name = "Bank test"}; + company.AddAddress(address); + company.AddBank(bankAccount); + using (ISession session = sessions.OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + session.Persist(company); + tx.Commit(); + } + } + return company.Id; + } + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2828/Mappings.hbm.xml 2011-08-07 19:08:28 UTC (rev 6002) @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + namespace="NHibernate.Test.NHSpecificTest.NH2828" + assembly="NHibernate.Test"> + <class name="Company"> + <id name="Id" type="Guid"> + <generator class="guid" /> + </id> + <set name="Addresses" access="field.camelcase" inverse="true" cascade="all,delete-orphan"> + <key column="CompanyId" on-delete="cascade" /> + <one-to-many class="Address" /> + </set> + <set name="BankAccounts" access="field.camelcase" inverse="true" cascade="all,delete-orphan"> + <key column="CompanyId" on-delete="cascade" not-null="true" /> + <one-to-many class="BankAccount" /> + </set> + <property name="Name" /> + </class> + + <class name="BankAccount"> + <id name="Id" type="Guid"> + <generator class="guid" /> + </id> + <property name="Name" /> + <many-to-one name="Company" column="CompanyId" /> + </class> + + <class name="Address"> + <id name="Id" type="Guid"> + <generator class="guid" /> + </id> + <property name="Name" /> + <many-to-one name="Company" column="CompanyId" /> + </class> + +</hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-07-30 13:23:44 UTC (rev 6001) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-08-07 19:08:28 UTC (rev 6002) @@ -898,6 +898,8 @@ <Compile Include="NHSpecificTest\SqlConverterAndMultiQuery\Fixture.cs" /> <Compile Include="NHSpecificTest\SqlConverterAndMultiQuery\Model.cs" /> <Compile Include="NHSpecificTest\SqlConverterAndMultiQuery\SqlConverter.cs" /> + <Compile Include="NHSpecificTest\NH2828\Entities.cs" /> + <Compile Include="NHSpecificTest\NH2828\Fixture.cs" /> <Compile Include="Parameters\NamedParameterSpecificationTest.cs" /> <Compile Include="PolymorphicGetAndLoad\Domain.cs" /> <Compile Include="PolymorphicGetAndLoad\PolymorphicGetAndLoadTest.cs" /> @@ -2734,6 +2736,7 @@ <EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> + <EmbeddedResource Include="NHSpecificTest\NH2828\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2761\A.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2761\B.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2761\C.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |