2012-03-27 82 views
1

我使用NHibernate和Repository-Pattern。存儲庫具有方法Insert()和Update()。 現在,Insert()調用Session.Save(實體)和Update()調用Session.Merge(實體)。 我的實體擁有的PrimaryKey的休耕映射:告訴NHibernate執行插入語句

<id name="Id" column="TBADRPERSON_ID" type="Int32" unsaved-value="0">  
        <generator class="assigned"/> 
    </id> 

將ID從我分配。現在,Session.Save(實體)首先執行Select來查看,如果實體是新的或已經存在的話。但在Insert()中,實體總是新的。我正在尋找一種方法來告訴NHibernate總是做一個插入 - 首先是一個選擇,然後是一個插入。 我已經看到,我可以用Version-Property來做到這一點 - 但我無法更改數據庫架構。

感謝您的任何幫助。

回答

0

如果你想永遠保存,也許你可以試試:

<id name="Id" column="TBADRPERSON_ID" type="Int32" unsaved-value="any">  
       <generator class="assigned"/> 
</id> 

然後做插入Session.SaveOrUpdate()(),和Session.merge()來然後Session.SaveOrUpdate()爲更新()

0

我想你應該刪除屬性unsaved-value =「0」。當您保存實體時,Nhibernate會將該ID與'0'進行比較。 如果不相等,如果不在會話中,Nhibernate會首先選擇它。

0

我認爲你可以使用session.Update()而不是session.Merge(),它不會從數據庫加載實體。或者,可以在所有情況下使用session.SaveOrUpdate()。