Steve... My friend...Which is the right place for features request and patch ? ;)
2008/11/13 Steve Wagner <[EMAIL PROTECTED]> > Hi Fabio, here is a patch which adds 3 tests where one is currently > failing. Add the failing test i added a short description. > > Steve Wagner schrieb: > > Ok i will try it. > > > > If both SchemaVerify and this are work, i think the following workflow > > could prevent the ghosting. > > > > * I create a Test which runs SchemaVerify. > > * SchemaVerify tells me that i could run into ghosting with the current > > mapping. > > * I change the mapping with the property > > * SchemaVerify passes > > > > Fabio Maulo schrieb: > >> 2008/11/13 Steve Wagner <[EMAIL PROTECTED]> > >> > >>> Wouldn't it here a good suggestion to add an per property option which > >>> forces nhibernate to eval DBNull.Value==default(T) if it dose a dirty > >>> check? > >>> > >> I think we have it working. In meta-data we having DefaultValue exactly > for > >> that.mmm wait ... sometimes you are talking about a new feature for > existing > >> data where you don't want to change the existing record even if you have > a > >> value in the entity and a null in the DB. > >> Do you can create a failing test for the new feature ? > >> > > > > Index: nhibernate/src/NHibernate.Test/NHibernate.Test.csproj > =================================================================== > --- nhibernate/src/NHibernate.Test/NHibernate.Test.csproj (Revision > 3887) > +++ nhibernate/src/NHibernate.Test/NHibernate.Test.csproj > (Arbeitskopie) > @@ -375,6 +375,10 @@ > <Compile Include="NHSpecificTest\CollectionFixture.cs" /> > <Compile Include="NHSpecificTest\CriteriaFromHql\Fixture.cs" /> > <Compile Include="NHSpecificTest\CriteriaFromHql\Person.cs" /> > + <Compile Include="NHSpecificTest\Ghosting\Fixture.cs" /> > + <Compile Include="NHSpecificTest\Ghosting\Person.cs" /> > + <Compile Include="NHSpecificTest\Ghosting\PersonPreventGhost.cs" /> > + <Compile Include="NHSpecificTest\Ghosting\PersonWithGhost.cs" /> > <Compile Include="NHSpecificTest\NH1033\Animal.cs" /> > <Compile Include="NHSpecificTest\NH1033\Fixture.cs" /> > <Compile Include="NHSpecificTest\NH1033\Reptile.cs" /> > @@ -1515,6 +1519,7 @@ > <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> > <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> > <Content Include="DynamicEntity\package.html" /> > + <EmbeddedResource Include="NHSpecificTest\Ghosting\Mappings.hbm.xml" > /> > <EmbeddedResource Include="NHSpecificTest\NH1478\Mappings.hbm.xml" /> > <EmbeddedResource Include="NHSpecificTest\NH1447\Mappings.hbm.xml" /> > <EmbeddedResource Include="TypesTest\EnumCharClass.hbm.xml" /> > > Eigenschaftsänderungen: > nhibernate\src\NHibernate.Test\NHSpecificTest\Ghosting > ___________________________________________________________________ > Hinzugefügt: bugtraq:url > + http://jira.nhibernate.org/browse/%BUGID% > Hinzugefügt: bugtraq:logregex > + NH-\d+ > > > Index: nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Fixture.cs > =================================================================== > --- nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Fixture.cs > (Revision 0) > +++ nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Fixture.cs > (Revision 0) > @@ -0,0 +1,88 @@ > +using NUnit.Framework; > + > +namespace NHibernate.Test.NHSpecificTest.Ghosting > +{ > + [TestFixture] > + public class Fixture : BugTestCase > + { > + protected override void OnSetUp() > + { > + Person person = new Person(); > + person.Number = null; > + > + using (ISession session = OpenSession()) > + using (ITransaction tx = session.BeginTransaction()) > + { > + session.Save( person ); > + > + tx.Commit(); > + } > + } > + > + protected override void OnTearDown() > + { > + using (ISession session = OpenSession()) > + using (ITransaction tx = session.BeginTransaction()) > + { > + session.Delete( "from Person" ); > + session.Delete( "from PersonWithGhost" ); > + tx.Commit(); > + } > + } > + > + [Test] > + public void PersonWasPersistedCorrectlyAndGeneratesNoGhost() > + { > + using (ISession session = OpenSession()) > + using (ITransaction tx = session.BeginTransaction()) > + { > + var person = session.CreateCriteria( typeof( Person ) ) > + .SetMaxResults( 1 ) > + .UniqueResult<Person>(); > + > + Assert.IsNotNull( person ); > + Assert.IsNull( person.Number ); > + Assert.IsFalse( session.IsDirty() ); > + } > + } > + > + [Test] > + public void PersonGeneratesAGhost() > + { > + using( ISession session = OpenSession() ) > + using( ITransaction tx = session.BeginTransaction() ) > + { > + var person = session.CreateCriteria( typeof( > PersonWithGhost ) ) > + .SetMaxResults( 1 ) > + .UniqueResult<PersonWithGhost>(); > + > + Assert.IsNotNull( person ); > + Assert.AreEqual( default( int ), person.Number ); > + Assert.IsTrue( session.IsDirty() ); > + } > + } > + > + [Test] > + public void OptionToPreventTheGenerationOfAGhost() > + { > + using( ISession session = OpenSession() ) > + using( ITransaction tx = session.BeginTransaction() ) > + { > + var person = session.CreateCriteria( typeof( > PersonPreventGhost ) ) > + .SetMaxResults( 1 ) > + .UniqueResult<PersonPreventGhost>(); > + > + Assert.IsNotNull( person ); > + Assert.AreEqual( default( int ), person.Number ); > + Assert.IsFalse( session.IsDirty() ); > + > + /// @Fabio: > + /// In this object the Number property should have set > + /// an special flag which forces NHibernate to > + /// evaluates default(int) == DBNull.Value > + /// when it dose the IsDirty check of the Number > + /// property. > + } > + } > + } > +} > \ No newline at end of file > Index: > nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Mappings.hbm.xml > =================================================================== > --- nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Mappings.hbm.xml > (Revision 0) > +++ nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Mappings.hbm.xml > (Revision 0) > @@ -0,0 +1,24 @@ > +<?xml version="1.0" encoding="utf-8" ?> > +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > + > namespace="NHibernate.Test.NHSpecificTest.Ghosting" > + assembly="NHibernate.Test"> > + > + <class name="Person"> > + <id name="Id"> > + <generator class="native" /> > + </id> > + <property name="Number" /> > + </class> > + <class name="PersonWithGhost" table="Person"> > + <id name="Id"> > + <generator class="native" /> > + </id> > + <property name="Number" /> > + </class> > + <class name="PersonPreventGhost" table="Person"> > + <id name="Id"> > + <generator class="native" /> > + </id> > + <property name="Number" /> > + </class> > +</hibernate-mapping> > Index: nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Person.cs > =================================================================== > --- nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Person.cs > (Revision 0) > +++ nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Person.cs > (Revision 0) > @@ -0,0 +1,22 @@ > +using System.Collections.Generic; > + > +namespace NHibernate.Test.NHSpecificTest.Ghosting > +{ > + public class Person > + { > + private int id; > + private int? _number; > + > + public virtual int Id > + { > + get { return id; } > + set { id = value; } > + } > + > + public virtual int? Number > + { > + get { return _number; } > + set{ _number = value; } > + } > + } > +} > \ No newline at end of file > Index: > nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/PersonPreventGhost.cs > =================================================================== > --- > nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/PersonPreventGhost.cs > (Revision 0) > +++ > nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/PersonPreventGhost.cs > (Revision 0) > @@ -0,0 +1,20 @@ > +namespace NHibernate.Test.NHSpecificTest.Ghosting > +{ > + public class PersonPreventGhost > + { > + private int id; > + private int _number; > + > + public virtual int Id > + { > + get { return id; } > + set { id = value; } > + } > + > + public virtual int Number > + { > + get { return _number; } > + set { _number = value; } > + } > + } > +} > \ No newline at end of file > Index: > nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/PersonWithGhost.cs > =================================================================== > --- > nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/PersonWithGhost.cs > (Revision 0) > +++ > nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/PersonWithGhost.cs > (Revision 0) > @@ -0,0 +1,20 @@ > +namespace NHibernate.Test.NHSpecificTest.Ghosting > +{ > + public class PersonWithGhost > + { > + private int id; > + private int _number; > + > + public virtual int Id > + { > + get { return id; } > + set { id = value; } > + } > + > + public virtual int Number > + { > + get { return _number; } > + set { _number = value; } > + } > + } > +} > \ No newline at end of file > > -- Fabio Maulo
