I am having problems deleting a collection. This is the error message I get: 
Code:
could not delete collection: [KBR.LAPD.DocumentManagement.Entities.Rfi.Transmittals#1258]
Source:NHibernate
StackTrace:   at NHibernate.Collection.AbstractCollectionPersister.Remove(Object id, ISessionImplementor session)
   at NHibernate.Impl.ScheduledCollectionRemove.Execute()
   at NHibernate.Impl.SessionImpl.Execute(IExecutable executable)
   at NHibernate.Impl.SessionImpl.ExecuteAll(IList list)
   at NHibernate.Impl.SessionImpl.Execute()
   at NHibernate.Impl.SessionImpl.Flush()
No other information as to what the problem was. (
Pointless error message in that case, don't you think?)
However, I do think it might be due to the fact that I have the same objects appearing at multiple points in the object graph due to a mildly complex set of relationships.
Any guidance?
=============================================
FYI: code running:
Code:
       /// <summary>
        /// Deletes the specified RFI.
        /// </summary>
        /// <param name="rfiId"></param>
        public override void DeleteById (int rfiId)
        {
            //Navigate the object graph and delete all the required objects and associations
            Rfi rfiToDelete;
            try
            {
                //Get the current full RFI object graph
                rfiToDelete = GetByIdWithAll(rfiId);
                
                //Now delete all the transmittals
                if(rfiToDelete.Transmittals != null)
                {
                    if(rfiToDelete.Transmittals.Count > 0)
                    {
                        foreach (object o in rfiToDelete.Transmittals)
                        {
                            Transmittal xmtl = o as Transmittal;
                            if(xmtl != null)
                            {
                                //Clear out any TransmittalRecipients
                                if(xmtl.TransmittalRecipients != null)
                                {
                                    if(xmtl.TransmittalRecipients.Count > 0)
                                    {
                                        foreach (object recipient in xmtl.TransmittalRecipients)
                                        {
                                            TransmittalRecipient transmittalRecipient = o as TransmittalRecipient;
                                            if(transmittalRecipient != null)
                                            {
                                                localSession.Delete(transmittalRecipient);
                                            }
                                        }
                                    }
                                }
                                xmtl.TransmittalRecipients.Clear();
                                
                                //Now clear out all the documents
                                if(xmtl.Documents != null)
                                {
                                    foreach (object obj in xmtl.Documents)
                                    {
                                        Document document = obj as Document;
                                        if(document != null)
                                        {
                                            localSession.Delete(document);
                                        }
                                    }
                                    
                                    xmtl.Documents.Clear();
                                }
                            }
                            //Now delete the transmittal
                            localSession.Delete(xmtl);
                        }
                    }
                    rfiToDelete.Transmittals = null;
                }
                
                //Delete workflow tasks
                
                if(rfiToDelete.WorkflowTasks != null)
                {
                    if(rfiToDelete.WorkflowTasks.Count > 0)
                    {
                        foreach (object task in rfiToDelete.WorkflowTasks)
                        {
                            WorkflowTask workflowTask = task as WorkflowTask;
                            if(workflowTask != null)
                            {
                                localSession.Delete(workflowTask);
                            }
                        }
                    }
                }
                
                
                
                //Delete history?
                if(rfiToDelete.History != null)
                {
                    if(rfiToDelete.History.Count > 0 )
                    {
                        foreach (object o in rfiToDelete.History)
                        {
                            RfiAction entry = o as RfiAction;
                            if(entry != null)
                            {
                                localSession.Delete(entry);
                            }
                        }
                    }
                }
                
                
                //Delete documents
                if(rfiToDelete.Documents != null)
                {
                    if(rfiToDelete.Documents.Count > 0)
                    {
                        foreach (object o in rfiToDelete.Documents)
                        {
                            Document doc = o as Document;
                            if(doc != null)
                            {
                                localSession.Delete(doc);
                            }
                        }
                    }
                }
                
                //finally, delete our RFI
                localSession.Delete(rfiToDelete);
                
                
                
            }
            catch(Exception ex)
            {
                bool rethrow = ExceptionPolicy.HandleException(ex, ExceptionPolicyName.DataAccessPolicy);
                if(rethrow)
                {
                    throw;
                }
            }
        }
Related mappings:
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" namespace="KBR.LAPD.DocumentManagement.Entities">
  <class name="KBR.LAPD.DocumentManagement.Entities.Rfi, Entities" table="RFI">
    <id name="RfiID" column="RFI_ID">
      <generator class="sequence">
        <param name="sequence">RFI_RFI_ID_SEQ</param>
      </generator>
    </id>
    <version name="Version" column="VERSION"/>
    <property name="RfiName" column="RFI_NAME" />
    <property name="Description" column="RFI_DESC" />
    <property name="RfiStatusID" column="RFI_STATUS_ID" />
    <property name="TransmittalMethodCode" column="XMTL_MTHD_CODE" />
    <property name="InApprovalDate" column="INAPPROVAL_DATE"/>
    <property name="SubmittedDate" column ="SUBMITTED_DATE" />
    <property name="CreatedDate" column="CREATED_DATE" />
    <property name="ClosedDate" column="CLOSED_DATE" />
    <bag name="History" table="RFI_HISTORY" outer-join="true" fetch="join" lazy="false" cascade="all-delete-orphan" order-by="TIMESTAMP DESC" >
      <key column="RFI_ID"/>
      <one-to-many class="KBR.LAPD.DocumentManagement.Entities.RfiAction, Entities"/>      
    </bag>
    <many-to-one name ="PurchaseOrder" class="KBR.LAPD.DocumentManagement.Entities.PurchaseOrder, Entities" column="PURCHASE_ORDER_ID" />    
    <many-to-one name ="Originator" class="KBR.LAPD.DocumentManagement.Entities.User, Entities" column="ORIGINATOR_USER_ID" />
    <many-to-one name ="OwnerGroup" class="KBR.LAPD.DocumentManagement.Entities.Group, Entities" column="OWNER_GROUP_ID" />
    <many-to-one name="TransmittalType" class="KBR.LAPD.DocumentManagement.Entities.TransmittalType, Entities" column="XMTL_TYPE_ID" fetch="select"/>
    <many-to-one name="SubProject" class="KBR.LAPD.DocumentManagement.Entities.SubProject, Entities"  column="SUB_PROJ_ID" outer-join="false" fetch="select" />
    <bag name="Documents"  table="DOC" order-by="DOC_ID" outer-join="true" fetch="join" lazy="false">
      <key column="RFI_ID" />
      <one-to-many class="KBR.LAPD.DocumentManagement.Entities.Document, Entities" />      
    </bag>
    <bag name="Transmittals" outer-join="true" fetch="join" table="XMTL" lazy="true">
      <key column="RFI_ID" foreign-key="XMTL_ID" />
      <one-to-many class="KBR.LAPD.DocumentManagement.Entities.Transmittal, Entities"/>      
    </bag>
    <bag name="WorkflowTasks" table="TASK" fetch="join" order-by="EXEC_ORDER" outer-join="true">
      <key column="RFI_ID"/>
      <one-to-many class="KBR.LAPD.DocumentManagement.Entities.WorkflowTask, Entities"/>
    </bag>
    
</class>
  
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" namespace="KBR.LAPD.DocumentManagement.Entities">
  <class name="KBR.LAPD.DocumentManagement.Entities.Transmittal, Entities" table="XMTL">
    <id name="TransmittalID" column="XMTL_ID">
      <generator class="sequence">
        <param name="sequence">XMTL_XMTL_ID_SEQ</param>
      </generator>
    </id>
    <version name="Version" column="VERSION"/>
    <property name="Comment" column="NOTES" />
    <many-to-one name="Rfi" column="RFI_ID" class="KBR.LAPD.DocumentManagement.Entities.Rfi, Entities"/>
    <bag name="Documents" table="DOC" outer-join="true" fetch="join" lazy="false" >
      <key column="XMTL_ID"/>
      <one-to-many class="KBR.LAPD.DocumentManagement.Entities.Document, Entities"/>
    </bag>
    <bag name="TransmittalRecipients" table="XMTL_RECIPIENT" outer-join="true" fetch="join" lazy="false" inverse="true"  >
      <key column ="XMTL_ID"></key>
      <one-to-many class ="KBR.LAPD.DocumentManagement.Entities.TransmittalRecipient, Entities"/>
    </bag>
  </class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" namespace="KBR.LAPD.DocumentManagement.Entities">
  <class name="KBR.LAPD.DocumentManagement.Entities.TransmittalRecipient, Entities" table="XMTL_RECIPIENT">
    <id name="TransmittalRecipientID" column="XMTL_REC_ID">
      <generator class="sequence">
        <param name="sequence">XMTL_RECIPIENT_ID_SEQ</param>
      </generator>
    </id>
    <version name="Version" column="VERSION"/>
    <property name="TurnaroundDays" column="XMTL_TURNAROUND_TIME" />
    <property name="AutoGenerated" column="AUTO_GENERATED" type="Boolean"  />
    <many-to-one name="Transmittal" class="KBR.LAPD.DocumentManagement.Entities.Transmittal, Entities" column="XMTL_ID"  />
    <many-to-one name="RecipientGroup" class="KBR.LAPD.DocumentManagement.Entities.Group, Entities" column="XMTL_REC_GROUP_ID" />
    <many-to-one name="RecipientTransmittalPurpose" class="KBR.LAPD.DocumentManagement.Entities.RecipientTransmittalPurpose, Entities" column="RECIPIENT_XMTL_PURPOSE_ID" />
  </class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
  <class name="KBR.LAPD.DocumentManagement.Entities.Document, Entities" table="DOC">
    <id name="DocumentID" column="DOC_ID">
      <generator class="sequence">
        <param name="sequence">DOC_DOC_ID_SEQ</param>
      </generator>
    </id>
    <version name="Version" column="VERSION"/>
    <property name="DocumentName" column="DOC_NAME" length="100" type="string"  />
    <property name="FileName" column="DOC_FILENAME" length ="300" type="string" />
    <property name="Title" column="DOC_TITLE" length="100" type="string" />
    <property name="StorageLocation" column="DOC_STORAGE_LOCATION" length="100"  type="string" />
    <property name="DocumentStorageID" column="DOC_STORAGE_ID" />
    <property name="Revision" column="DOC_REVISION" type="string" length="5" />
    <property name="RevisionDate" column="DOC_REV_DATE"/>
    <property name="DocumentIdentifierString" column="DOC_GUID" type="string" not-null="true" />
    <property name="IsValid" column="IS_VALID" type="boolean" not-null="true" />
    <property name="SheetNumber" column="DOC_SHEET_NUMBER" type="string" />
    <property name="ValidationErrorSummary"  column="VAL_ERR_SUMMARY" />
    <many-to-one name="DocumentType" column="DOC_TYPE_ID"/>
    <many-to-one name="DocumentSubType" column="DOC_SUB_TYPE_ID"/>
    <many-to-one name="Transmittal" column="XMTL_ID"/>
    <many-to-one name="Rfi" column="RFI_ID"/>
    <many-to-one name="DocumentOrganisation" column="DOC_ORG_ID" class="KBR.LAPD.DocumentManagement.Entities.Organisation, Entities"/>
    <many-to-one name="DocumentDiscipline" column="DOC_DISC_ID" class="KBR.LAPD.DocumentManagement.Entities.Discipline, Entities"/>
    <bag name="Attributes" fetch="join" lazy="false" outer-join="true" table="DOC_ATTR">
      <key column="DOC_ID" />
      <one-to-many class="KBR.LAPD.DocumentManagement.Entities.Attribute, Entities"/>
    </bag>
  </class>
</hibernate-mapping>