On Jun 28, 9:15 pm, V <vijay.s.g...@gmail.com> wrote:
> > Yes but, as I said in the second answer, the final behaviour (of what NH
> > will do) depend on the type of the collection (an <set> will have a
> > different behaviour of a <bag>).
>

Hello again friends.

I created a small demo and it works fine except one issue. If I get a
parent with some children from WCF, remove one child, add a new one,
update an existing one, and finally save the parent again, the child
that was deleted from client does not get deleted from database. I
dumped SQL into log file and saw there was no delete statement issued.
I am posting my hbm files and the demo code used for saving the
parent.

Parent HBM:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
access="">
  <class name="BackendService.Parent, FrontEnd, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null" table="tbl_parent"
xmlns="urn:nhibernate-mapping-2.2" dynamic-insert="true" dynamic-
update="true">
    <id name="Id" type="Guid" unsaved-
value="00000000-0000-0000-0000-000000000000" column="id">
      <generator class="guid" />
    </id>
    <property name="Description" type="String">
      <column name="description" />
    </property>
    <property name="Age" type="Int32">
      <column name="age" />
    </property>
    <set name="Children" lazy="true" cascade="all-delete-orphan"
fetch="select" inverse="true">
      <key column="Parent_id" />
      <one-to-many class="BackendService.Child, FrontEnd,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    </set>
  </class>
</hibernate-mapping>

Child HBM:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
access="">
  <class name="BackendService.Child, FrontEnd, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null" table="tbl_child"
xmlns="urn:nhibernate-mapping-2.2" dynamic-insert="true" dynamic-
update="true">
    <id name="Id" type="Guid" unsaved-
value="00000000-0000-0000-0000-000000000000" column="id">
      <generator class="guid" />
    </id>
    <property name="Description" type="String">
      <column name="description" />
    </property>
    <property name="Age" type="Int32">
      <column name="age" />
    </property>
    <many-to-one cascade="save-update" fetch="join" name="ParentRef"
column="parent_id" />
  </class>
</hibernate-mapping>

Code:

        public void SaveParent(Parent parent)
        {
            try
            {
                var sessionFactory = MappingHelper.CreateSesionFactory
();
                using (var session = sessionFactory.OpenSession())
                {
                    session.FlushMode = FlushMode.Never;
                    session.Replicate(parent,
ReplicationMode.Overwrite);
                    session.SaveOrUpdate(parent);
                    // if used alone, SaveOrUpdate causes Expected 1,
Actual 0 exception and it does not save children
                    session.Flush();
                }
            }
            catch(Exception ex)
            {
                LogException(ex);
                throw;
            }
        }

PS: MappingHelper.CreateSesionFactory(); creates session factory only
once, saves it in a static variable and returns the same on every
subsequent invocation.

Thanks
V
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to nhusers@googlegroups.com
To unsubscribe from this group, send email to 
nhusers+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to