Buongiorno a tutti
ho da poco iniziato ad utilizzare nhibernate e vorrei capire come funziona Hibernate con le relazini bidirezionali.
Ho i seguenti file di mapping(classe Anagraphic in relazione uno a molti con Anagraphicspecialty)
<hibernate-mapping assembly="WpfTest" namespace="WpfTest.Domain" xmlns="urn:nhibernate-mapping-2.2"
xsi:noNamespaceSchemaLocation="nhibernate-mapping.xsd">
<class name="Anagraphic" table="ANAGRAPHIC" lazy="true" >
<id name="CodeExternal" >
<column name="CODE_EXTERNAL" sql-type="int" not-null="true" />
<generator class="identity" />
</id> <bag name="AnagraphicSpecialties" inverse="true" cascade="all">
<key column="Anagraphic_Code_External" />
<one-to-many class="AnagraphicSpecialty" />
</bag>
</class>
</hibernate-mapping>
xsi:noNamespaceSchemaLocation="nhibernate-mapping.xsd">
<class name="AnagraphicSpecialty" table="TANAGRAPHIC_SPECIALTIES" lazy="true" >
<id name="IdAnagraphicSpecialty" column="ID_Anagraphic_Specialty">
<column name="ID_Anagraphic_Specialty" sql-type="int" not-null="true" />
<generator class="identity" />
</id>
<property name="IdSpecialty">
<column name="ID_Specialty" sql-type="int" not-null="true" />
</property>
<property name="AnagraphicCodeExternal" update="false" insert="false">
<column name="Anagraphic_Code_External" sql-type="int" not-null="true" />
</property>
<many-to-one name="Anagraphic" class="Anagraphic" cascade="save-update">
<column name="Anagraphic_Code_External" sql-type="int" not-null="true" />
</many-to-one>
</class>
</hibernate-mapping>
In c# facendo una cosa del genere, non dovrebbe assegnare automaticamente il campo AnagraphicCodeExternal all'oggetto AnagraphicSpecialties ?
MyAnagraphic.AnagraphicSpecialties.Add(new AnagraphicSpecialties(){IdSpecialty=5});
session.Flush();
session.SaveOrUpdate(MyAnagraphic);
o devo obbligatoriamente assegnare l'oggetto della relazione in questo modo?
MyAnagraphic.AnagraphicSpecialties.Add(new AnagraphicSpecialties(){IdSpecialty=5,Anagraphic=MyAnagraphic});
session.Flush();
session.SaveOrUpdate(MyAnagraphic);
Inoltre non esiste un modo per salvare un oggetto specificando il valore della chiave esterna o specificando direttamente l'oggetto evitando l'eccezione Error dehydrating property value ?
<property name="AnagraphicCodeExternal">
<column name="Anagraphic_Code_External" sql-type="int" not-null="true" />
</property>
<many-to-one name="Anagraphic" class="Anagraphic" cascade="save-update">
<column name="Anagraphic_Code_External" sql-type="int" not-null="true" />
</many-to-one>
Grazie