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