So speichern Sie ein Kind mit zugewiesener ID im Ruhezustand

Ich habe zwei Klassen:

public class Parent
{
    public virtual long? ID { get; set; } // native
    public virtual IList<Child> Children { get; set; }
    public virtual string Name { get; set; }
}

public class Child
{
    public virtual long ID { get; set; } // assigned
    public virtual string Name { get; set; }
}

Instanziieren und Retten von Eltern und Kind:

child = new Child() { ID = 1, Name = "SomeName" };
parent = new Parent() { Children = new List() { child } };
session.Save(parent);

Welches gibt mir:

NHibernate.StaleStateException: Unerwartete Zeilenanzahl: 0; erwartet: 1.

Ich denke, das Problem liegt in der zugewiesenen ID des Kindes. NHibernate glaubt, dass die ID bereits gespeichert wurde, bevor dies nicht der Fall ist.

Das generierte (gekürzte & umbenannte) SQL ist:

NHibernate: select child0_.ID as child1_1_, child0_.NAME as NAME1_, child0_.PARENT_ID as COMMAND7_1_, from CHILD child0_
NHibernate: select parent0_.PARENT_ID as parent1_10_
NHibernate: select parent0_.PARENT_ID as parent1_10_, parent0_.NAME as parent2_10_ from PARENT parent0_
NHibernate: UPDATE CHILD SET PARENT_ID = @p0 WHERE CHILD_ID = @p1;@p0 = 2, @p1 = 1

Dateien zuordnen:

<class name="MyNamespace.Child" table="CHILD">
  <id name="ID" column="CHILD_ID" type="System.Int64">
    <generator class="assigned"></generator>
  </id>
  <property name="Name" column="NAME"></property>
</class>

<class name="MyNamespace.Parent" table="PARENT">
  <id name="ID" column="PARENT_ID" type="System.Int64">
    <generator class="native"></generator>
  </id>
  <property name="Name" column="NAME"></property>
  <bag name="Children">
    <key column="PARENT_ID"></key>
    <one-to-many class="MyNamespace.Child"></one-to-many>
  </bag>
</class>

Bei der Suche in Google habe ich Informationen zu Versions-Tags gefunden, die möglicherweise eine Lösung darstellen, für die ich jedoch kein dauerhaftes Feld als Version verwenden kann. Wie kann ich in diesem Fall ein Kind mit zugewiesener ID und dessen Eltern speichern (einfügen)?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage