2009-10-10 4 views
2

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?

Répondre

4

Vous devez placer le SaveOrUpdate dans une transaction, puis exécuter Transaction.Commit(). Sinon, le mappage ne sauvegarde pas, seules les entités.

Merci, Jason

+0

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(). –

0

Je pense que le problème est dans inverse=true pour CalendarEvent. Vous devriez le supprimer

Questions connexes