2012-01-05 57 views
0

我已經在「AnagraficaBase」 HBM文件中使用動態會話:單向許多一對多插入NHibernate的

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
<class entity-name="AnagraficaBase" table="anagrafica"> 
<id name="ID" type="int" > 
    <column name="ID" not-null="true" /> 
    <generator class="identity" /> 
</id> 
<property name="Email" type="string" > 
    <column name="Email" sql-type="varchar(255)" not-null="true" /> 
</property> 
<one-to-one cascade="all" class="NetCms.Users.User" property-ref="AnagraficaMapped" name="User" /> 
<joined-subclass entity-name="Anagraficaprova" table="anagrafica_prova" > 
    <key> 
    <column name="id_anagrafica_prova" /> 
    </key> 
    <property name="data di nascita" type="DateTime"> 
    <column name="data_di_nascita" sql-type="DateTime" not-null="true" /> 
    </property> 
    <property name="nome" type="string"> 
    <column name="nome" sql-type="varchar(25)" not-null="true" /> 
    </property> 
    <property name="dropdown test" type="string"> 
    <column name="dropdown_test" sql-type="varchar(255)" not-null="true" /> 
    </property> 
    <bag name="profilo" table="anagrafica_prova_custom_field_checkboxlist_values" cascade="all" fetch="select"> 
    <key> 
     <column name="IDanagrafica_prova" not-null="true" /> 
    </key> 
    <many-to-many entity-name="CustomCheckboxListValue"> 
     <column name="IDcustom_field_checkboxlist_value" not-null="true" /> 
    </many-to-many> 
    </bag> 
</joined-subclass> 
</class> 
</hibernate-mapping> 

我想創建一個動態會話(EntityMode.Map)的「Anagraficaprova」對象。正如你所看到的,我在「Anagraficaprova」和「CustomCheckboxListValue」之間有一個單向的多對多關係。

所以,當我這樣做:

ISession mapSession = sess.GetSession(EntityMode.Map); 

List<IDictionary> profiles = new List<IDictionary>(); 
Hashtable profilo1 = (Hashtable) mapSession.get("CustomCheckboxListValue",1); 
profiles.add(profilo1); 

Hashtable anagraficaProva = new Hashtable(); 
anagraficaProva.add("Email","test"); 
anagraficaProva.add("data di nascita", "08/10/1982"); 
anagraficaProva.add("nome","pippo"); 
anagraficaProva.add("dropdown test","1"); 

anagraficaProva.add("profilo", profiles); 

mapSession.SaveOrUpdate("Anagraficaprova", anagraficaProva); 

的anagraficaProva對象正確保存,但在 「anagrafica_prova_custom_field_checkboxlist_values」 表中的記錄(這對夫妻:IDanagrafica_prova,IDcustom_field_checkboxlist_value)未插入。

問題在哪裏?

謝謝...

+0

你是否檢查過'profilo1'不爲空? – Firo 2012-01-06 15:25:41

+0

當然我做到了! profilo1不是null! – kannata10 2012-01-10 09:13:42

+0

您是否在SaveOrUpdate後刷新會話,仍然不在數據庫中? ('mapSession.Flush();') – Firo 2012-01-10 10:17:24

回答

0

萬一別人來這裏。

NH插入AnagraficaBase,因爲它使用identity來獲取該id,但是將插入表批量插入到表anagrafica_prova_custom_field_checkboxlist_values中以便稍後插入它們。但是在它們被髮送到數據庫之前,會話被扔掉,因此批處理的插入。

mapSession.Flush(); SaveOrUpdate告訴NH發送所有掛起的語句。

相關問題