2009-07-13 7 views
1

Ich habe drei Klassen, die ein Problem beim Versuch, ein neues Kind hinzufügen hinzufügen.NHibernate und Hinzufügen neuer Elemente mit einer zusammengesetzten Auflistung zu einer untergeordneten Sammlung

Sie sind:

User { 
     List attributesGroup> 
} 

AttributesGroup { 
    attributesGroupId 
    value 
} 

AttributesGroupId { 
    attrName 
    userId 
} 

Die Abbildung ist:

<class name="AlternativeUserAttributes" table="`AlternativeUserAttributes`" lazy="true"> 
    <composite-id name="Id" class="Data.Entities.AlternativeUserAttributesId"> 
     <key-property name="AttributeName" column="`attributeName`" type="string" /> 
     <key-many-to-one name="User" class="Entities.User" column="`userId`" /> 
    </composite-id> 
    <property name="AttributeValue" column="`attributeValue`" type="string" /> 
    <many-to-one name="User" column="`userId`" cascade="none" not-null="true" /> 
    </class> 

ich Artikel und Klasse SaveUpdate auf der Benutzerklasse ohne Probleme entfernen können, aber wenn ich versuchen, ein Element der hinzufügen Sammlung über:

AlternativeUserAttributes aua = new AlternativeUserAttributes(); 
      aua.Id = new AlternativeUserAttributesId(); 
      aua.Id.AttributeName = name; 
      aua.Id.User = curUser; 
      aua.AttributeValue = value; 
      aua.User = curUser; 

     curUser.AlternativeUserAttributes.Add(aua); 

bekomme ich einen Fehler zu, dass die Zeilenanzahl war e Xpected, um 1 zu sein, aber war Null, und wenn ich versuche, nur das AlternateUserAttributes als sein selbst zu speichern, das Speicher verwendet, erhalte ich den diesen Fehler: Index war außerhalb der Reichweite. Muss nicht negativ und kleiner als die Größe der Sammlung sein. Parametername: index

Beide Versuche sind ein INSERT für das neue Element, aber ich bekomme diese Fehler. Gibt es jemanden, der helfen kann?

+0

Wenn ich den ungesicherten Wert festlegen, wird ein Fehler von zurückgegeben: System.ArgumentOutOfRangeException: Index war außerhalb des Bereichs. Muss nicht negativ und kleiner als die Größe der Sammlung sein. – monksy

Antwort

1

Ich habe das behoben, indem ich den ungesicherten Wert auf irgendeinen einstellte und die Bidirektionalität beseitigte.

1

Ich habe eine harte Zeit zu folgen (SO vermasselt Ihre Post), aber die Verwendung einer zusammengesetzten ID kann dieses Problem verursachen. Da der ID-Typ 'zugewiesen' ist, hat NHibernate keine Ahnung, wie man erkennt, ob das Objekt vorübergehend oder dauerhaft ist.

https://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/example-parentchild.html

Abschnitt Go 17.4 für weitere Informationen.

Eine Lösung besteht darin, ein Versions- oder Zeitstempelfeld zu verwenden. Am Ende habe ich die Basisklasse implementiert, die die Persistenz verfolgt und einen Interceptor verwendet.

ich gepostet Code hier: How to save a child with assigned id in nhibernate

Das heißt, wenn Sie INSERTs bekommen dann bin ich nicht 100% sicher, dass dies das gleiche Problem.

Verwandte Themen