I am saying that in Hibernate, they have schema-xxxx="verify/update/create" kind of attribute which puts some default behavior.
On Fri, Nov 14, 2008 at 12:35 PM, Steve Wagner <[EMAIL PROTECTED]> wrote: > > ? > > Tuna Toksöz schrieb: > > Hibernate has this as xml config, why don't we have it as config, instead > of > > ISchemaXXXX > > > > On Fri, Nov 14, 2008 at 12:16 PM, Steve Wagner <[EMAIL PROTECTED]> wrote: > > > >> So now it is in jira :-) > >> > >> http://jira.nhibernate.org/browse/NH-1568 > >> > >> Dose you have an issue for the SchemaVerify? Should i create one? > >> > >> Fabio Maulo schrieb: > >>> 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 > >>>> > >>>> > >>> > > > > > > > -- Tuna Toksöz Typos included to enhance the readers attention!
