Nhibernate many-to-many bag not insertable into association table

I know this has been asked and answered several times, but I have two classes, many of which. I have mutually matched them using bags. Here is NHibernate Mapping:

The calendar:

<?xml version="1.0" encoding="utf-8"?>
<!--Generated by NHibernate.Mapping.Attributes on 2009-10-09 18:09:29Z.-->
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Calendar.Calendar, Calendar" table="Calendars">
    <id name="CalendarId" column="CalendarId" type="Int32">
      <generator class="native" />
    </id>
    <property name="Name" length="100" />
    <property name="CalendarStatus" />
    <property name="CalendarType" type="Calendar.GenericEnumMapper`1[[Calendar.CalendarType, Calendar, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], Calendar" length="50" />
    <property name="RecordCreatedBy" column="CreatedBy" length="50" />
    <property name="RecordModifiedBy" column="ModifiedBy" length="50" />
    <property name="CreateDate" />
    <property name="ModifiedDate" />
    <bag name="Events" table="CalendarEventsInCalendar" cascade="all">
      <key column="CalendarId" />
      <many-to-many class="Calendar.CalendarEvent, Calendar" column="CalendarEventId" />
    </bag>
  </class>
</hibernate-mapping>

      

CalendarEvent:

<?xml version="1.0" encoding="utf-8"?>
<!--Generated by NHibernate.Mapping.Attributes on 2009-10-09 18:27:46Z.-->
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Calendar.CalendarEvent, Calendar" table="CalendarEvents">
    <id name="CalendarEventId" column="CalendarEventId" type="Int32">
      <generator class="native" />
    </id>
    <property name="EventStatus" />
    <property name="StartTime" />
    <property name="EndTime" />
    <property name="ImageUrl" length="255" />
    <property name="Description" length="2000" />
    <property name="LocationName" length="255" />
    <property name="Address1" length="255" />
    <property name="Address2" length="255" />
    <property name="City" length="255" />
    <property name="State" length="255" />
    <property name="Zip" length="10" />
    <property name="Title" length="255" />
    <property name="Url" length="255" />
    <property name="ExternalSystemId" />
    <property name="ExternalSystem" type="Calendar.GenericEnumMapper`1[[Calendar.ExternalSystemType, Calendar, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], Calendar" length="50" />
    <property name="RecordCreatedBy" column="CreatedBy" length="50" />
    <property name="RecordModifiedBy" column="ModifiedBy" length="50" />
    <property name="CreateDate" />
    <property name="ModifiedDate" />
    <many-to-one name="ParentEvent" column="ParentEventId" />
    <bag name="ChildEvents" lazy="true" fetch="subselect" cascade="all" inverse="true">
      <key column="ParentEventId" />
      <one-to-many class="Calendar.CalendarEvent, Calendar" />
    </bag>
    <bag name="Calendars" table="CalendarEventsInCalendar" lazy="false" inverse="true">
      <key column="CalendarEventId" />
      <many-to-many class="Calendar.Calendar, Calendar" column="CalendarId" />
    </bag>
  </class>
</hibernate-mapping>

      

And this is how I add the event to the calendar:

    public virtual void AddEvent(CalendarEvent calEvent)
    {
        if(!calEvent.Calendars.Contains(this))
            calEvent.Calendars.Add(this);

        Events.Add(calEvent);
    }

      

Then I do SaveOrUpdate (calendar)

Any ideas?

+2


source to share


2 answers


You have to wrap SaveOrUpdate in a transaction and then do Transaction.Commit (). Otherwise, the mapping does not save, only the entities.



Thanks Jason

+4


source


I think the problem is inverse=true

for CalendarEvent. You have to remove it



0


source







All Articles