2012-04-08 4 views
1

Ich bin sehr neu zu NHibernate, und ich stehe auf ein Problem beim Speichern einer Liste von untergeordneten Objekten.Eins-zu-viele-Liste, die nicht mit NHibernate gespeichert wird

HINWEIS

<class name="Note" table="NOTE">   
    <id name="NoteID" column="NOTE_ID"> 
      <generator class="identity" /> 
    </id>   
    ...  
    <list name="Sections" table="NOTE_SECTIONS" cascade="all" lazy="false"> 
      <key column="NOTE_ID"/>    
      <index column="SORT_ORDER"/> 
      <one-to-many class="Section"/> 
    </list> 
</class> 

Hinweis Abschnitt

<class name="Section" table="NOTE_SECTIONS"> 
    <id name="SectionID" column="Section_ID"> 
      <generator class="identity" /> 
    </id>  
    <property name="NoteID" column="NOTE_ID"/> 
    ... 
</class> 

Die Zuordnungen arbeiten perfekt zum Lesen der Daten. Allerdings, wenn ich eine Änderung der Note Section machen, die Abfragen, die er erzeugt wird durch die richtigen Schritte zu gehen, aber dann bekomme ich folgende Fehlermeldung:

NHibernate.Exceptions.GenericADOException: could not delete collection: [Domain.Note.Sections#1][SQL: UPDATE NOTE_SECTIONS SET NOTE_ID = null, SORT_ORDER = null WHERE NOTE_ID = @p0] ---> System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'NOTE_ID', table 'NOTE_SECTIONS'; column does not allow nulls. UPDATE fails.

Ich habe lesen, dass, um wie zu sparen Dies muss bidirektional sein. Aber ich habe auch gelesen, dass bidirektionale Mappings nicht mit Listen funktionieren. Es ist wichtig, dass meine Sammlung eine geordnete Reihenfolge hat - was ist die beste Art zu sparen?

Antwort

1

Sie sollten inverse="true" für Ihre Sammlung verwenden, wenn Sie untergeordnete Objekte auf diese Weise speichern möchten.

<list name="Sections" table="NOTE_SECTIONS" inverse="true" cascade="all" lazy="false"> 
     <key column="NOTE_ID"/>    
     <index column="SORT_ORDER"/> 
     <one-to-many class="Section"/> 
</list> 

Inverse Attribute in NHibernate

+0

, die genau es war. Also, keine bidirektionale Beziehung benötigt. Ich wünschte manchmal, dass NHibernate ein bisschen offensichtlicher war. inverse = "true" ist nicht gerade das intuitivste Kommando für Anfänger. –

0

wahrscheinlich müssten Sie Hinweis aus Note Abschnitt als viele-zu-eins-Beziehung beziehen.

Verwandte Themen