Ho due classi:Come salvare un bambino con id assegnato in NHibernate
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; }
}
istanziare e genitore risparmio e del bambino:
child = new Child() { ID = 1, Name = "SomeName" };
parent = new Parent() { Children = new List() { child } };
session.Save(parent);
che mi dà:
NHibernate. StaleStateException: numero di righe inattese: 0; attesi: 1.
Penso che il problema sia con l'ID assegnato sul bambino. Poiché ha un ID, NHibernate pensa di aver precedentemente salvato prima che non sia il caso.
Il generato (rifilato & rinominato) SQL è:
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
file di mapping:
<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>
Durante la ricerca google, ho trovato su tag versione che può essere una soluzione, ma non ho un campo persistente da utilizzare come versione. In questo caso, come posso salvare (inserire) un bambino con id assegnato e suo genitore?
Puoi pubblicare i tuoi rapporti di parentela? – mxmissile
Ok, li ho inclusi ora. –
Non sono sicuro che questo risolva il problema o non sia correlato all'id "assegnato", non ho mai lavorato con loro. Ma prova a impostare inverse = "true" sulla proprietà bag. – mxmissile