where ? I didn't see it. 2008/11/14 Tuna Toksöz <[EMAIL PROTECTED]>
> 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! > -- Fabio Maulo
