Jak uratować dziecko z przypisanym identyfikatorem w nhibernate
Mam dwie klasy:
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; }
}
Tworzenie i zapisywanie rodziców i dzieci:
child = new Child() { ID = 1, Name = "SomeName" };
parent = new Parent() { Children = new List() { child } };
session.Save(parent);
Co daje mi:
NHibernate.StaleStateException: Nieoczekiwana liczba wierszy: 0; oczekiwane: 1.
Myślę, że problem dotyczy przypisanego identyfikatora dziecka. Ponieważ ma identyfikator, NHibernate uważa, że wcześniej go zapisał, co nie jest prawdą.
Wygenerowany (przycięty i przemianowany) SQL to:
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
Mapowanie plików:
<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>
Podczas wyszukiwania w Google znalazłem o tagu wersji, który może być rozwiązaniem, ale nie mam trwałego pola do użycia jako wersja. W tym przypadku, jak mogę zapisać (wstawić) dziecko z przypisanym identyfikatorem i jego rodzicem?