nhibernate - Cascade ="all" not saving child entities -


i think object model below saying party , partyname have many 1 relatioship. think cascade=all party.hbm sshould having nhib save child partyname(s).

but isn't...

can explain why partyname isn't being saved party , fix?

cheers,
berryl

enter image description here

mapping

<class name="party" table="parties"> <id name="id">   <column name="partyid" />   <generator class="hilo" /> </id>  <discriminator column="type" not-null="true" type="string" />  <set access="field.camelcase-underscore" cascade="all" inverse="true" name="names">   <key foreign-key="party_partyname_fk">     <column name="partynameid" />   </key>   <one-to-many class="parties.domain.names.partyname, parties.domain" /> </set>  <subclass    name="smack.core.testingsupport.nhibernate.testabledomain.somedopeydomainmodel.student, smack.core.testingsupport"    discriminator-value="student"   >   <property name="number" />    <many-to-one      class="smack.core.testingsupport.nhibernate.testabledomain.somedopeydomainmodel.course, smack.core.testingsupport"      foreign-key="course_fk"      name="course">     <column name="courseid" index="courseindex" />   </many-to-one> </subclass> 

<many-to-one access="field.camelcase-underscore" class="parties.domain.party" foreign-key="party_fk" name="party">   <column name="partyid" index="partyindex" not-null="true"/> </many-to-one> <property name="therequiredname" not-null="true" length="50"/> <property name="everythingelse" /> <property name="contextused" length="50"/> <property name="salutation" length="20"/> <property name="effectiveperiod" type="smack.core.data.nhibernate.usertypes.daterangeusertype, smack.core.data">   <column name="effectivestart"/>   <column name="effectiveend"/> </property> 

failing test (and output)

    [test]     public void cansaveandload_allproperties()     {         var partyname = nameseeds.devname;         partyname.party = _party;         assert.that(_party.names.first(), is.equalto(partyname));           using (var tx = _session.begintransaction())         {             _session.save(_party);             tx.commit();         }         _session.clear();          party foundparty;         using (var tx = _session.begintransaction())         {             foundparty = _session.get<party>(_party.id); *** <=== name s/b saved!!             tx.commit();         }         partyname foundname = foundparty.names.first();         //found.look();          assert.that(foundname, is.equalto(partyname));         assert.that(foundname.party, is.not.null);         assert.that(foundname.therequiredname, is.equalto(partyname.therequiredname));         assert.that(foundname.everythingelse, is.equalto(partyname.everythingelse));         assert.that(foundname.contextused, is.equalto(partyname.contextused));         assert.that(foundname.salutation, is.equalto(partyname.salutation));         assert.that(foundname.effectiveperiod, is.equalto(partyname.effectiveperiod));     }   nhibernate: insert parties (type, partyid) values ('parties.domain.party', @p0);@p0 = 32768 [type: int32 (0)] nhibernate: select party0_.partyid partyid2_0_, party0_.number number2_0_, party0_.courseid courseid2_0_, party0_.type type2_0_ parties party0_ party0_.partyid=@p0;@p0 = 32768 [type: int32 (0)] 

with mapping of names <set> inverse=true, have explicitly call session.save(partynameobject) on each member of collection. if looking have nhibernate automatically save members of set when partyobject saved, need change names <set> inverse attribute inverse=false. tells nhibernate want party control relationship between party , partyname. must remember add each partynameobject party.names collection. otherwise, won't saved when call session.save(partyobject). keep in mind having parent control relationship may handy, if happen save partyobject without having loaded partynames collection, nhibernate update party fk null. in scenario cascade options set on names <set>, might find nhibernate deleting them well.


Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

android - layout with fragment and framelayout replaced by another fragment and framelayout -