nhibernate多对多包未插入关联表

nhibernate多对多包未插入关联表,nhibernate,many-to-many,Nhibernate,Many To Many,我知道这个问题已经被问过很多次了,但是我有两门课,是多对多的。我用袋子给他们画了地图。以下是NHibernate映射: 日历: <?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">

我知道这个问题已经被问过很多次了,但是我有两门课,是多对多的。我用袋子给他们画了地图。以下是NHibernate映射:

日历:

<?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>
    public virtual void AddEvent(CalendarEvent calEvent)
    {
        if(!calEvent.Calendars.Contains(this))
            calEvent.Calendars.Add(this);

        Events.Add(calEvent);
    }
然后我做一个SaveOrUpdate(日历)


有什么想法吗?

您必须在事务中包装SaveOrUpdate,然后执行transaction.Commit()。否则,映射不会保存,只保存实体

谢谢,
Jason

我认为CalendarEvent的问题在于
inverse=true
。你应该删除它

这只是事实的一半。基本上,您所需要的只是一个Session.Flush(),但由于Transaction.Commit()隐式地完成了这项工作,所以最好使用Transaction.Commit()。
    public virtual void AddEvent(CalendarEvent calEvent)
    {
        if(!calEvent.Calendars.Contains(this))
            calEvent.Calendars.Add(this);

        Events.Add(calEvent);
    }