Je sais que cela a été demandé et répondu un certain nombre de fois, mais j'ai deux classes qui sont plusieurs-à-plusieurs. Je me suis réciproque mapped en utilisant des sacs. Voici la cartographie NHibernate:nhibernate sac many-to-many ne pas insérer dans la table d'association
Calendrier:
<?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>
Et voici comment ajouter un événement à un calendrier:
public virtual void AddEvent(CalendarEvent calEvent)
{
if(!calEvent.Calendars.Contains(this))
calEvent.Calendars.Add(this);
Events.Add(calEvent);
}
Alors je fais SaveOrUpdate (calendar)
Des idées?
Ceci est la moitié de la vérité. Fondamentalement, tout ce dont vous avez besoin est un fichier Session.Flush(), mais comme Transaction.Commit() le fait implicitement, vous pouvez utiliser Transaction.Commit(). –