2011-01-17 3 views
1

Wenn ich ein neues Eltern-Objekt erstellen und dann neues Kind, um es Objekt hinzufügen und versuche ISession.Merge (Eltern) erhalte ich „keine Zeile mit dem angegebenen Identifikator zu tun existiert "Ausnahme für untergeordnetes Objekt.Nhibernate mit neuen Objektgraph mit dem angegebenen Bezeichner keine Zeile Merge existiert

Ist das nicht ein persistentes Objekt zu erstellen, annehmen Merge, wenn es in der DB nicht gefunden wird? Es erstellt es nur, wenn ich das übergeordnete Element mit einer leeren untergeordneten Auflistung zusammenführe.

Vielleicht ist etwas in meinem Mappings falsch?
Ich habe dieses Kind an:

<many-to-one class="Parent fetch="join" name="Parent"> 
    <column name="ParentId" /> 
</many-to-one> 

Und das bei Eltern:

<bag fetch="join" inverse="true" lazy="false" name="Childs" mutable="true"> 
    <key> 
    <column name="ParentId" /> 
    </key> 
    <one-to-many class="Child" /> 
</bag> 

Antwort

3

Sie cascade verwenden oder das Kind fusionieren getrennt:

<bag fetch="join" inverse="true" lazy="false" name="Childs" cascade="all"> 
    ... 
</bag> 

die Kinder getrennt Merging:

foreach(Child child in parent.Children) 
{ 
    session.Merge(child); 
} 

var mergedParent = session.Merge(parent); 

Ich bin eigentlich nicht sicher, was passiert, wenn die Kinder bereits im Sitzungscache sind, aber das Elternteil nicht ist. Wahrscheinlich müssen Sie eine Instanz mit allen zusammengeführten Daten selbst erstellen.

+1

Ich müde, cascade.all, und füge Kind vor Eltern zusammen, aber es funktioniert auch nicht. In diesem Fall erhalte ich eine Ausnahme beim Zusammenführen des Kindes, das nicht existiert. –

+0

und cascade = alle ohne vorherige Verschmelzung der Kinder? –

Verwandte Themen