我将NHibernate与Repository-Pattern一起使用。存储库具有方法Insert()和Update()。 现在,Insert()调用Session.Save(实体)和Update()调用Session.Merge(实体)。 我的实体为PrimaryKey提供了以下的映射:
<id name="Id" column="TBADRPERSON_ID" type="Int32" unsaved-value="0">
<generator class="assigned"/>
</id>
我是从我这里分配的。现在,Session.Save(实体)首先执行选择以查看,如果实体是新的或已经存在。但在Insert() - Case中,实体总是新的。我现在正在寻找一种告诉NHibernate总是进行插入的方法 - 首先是选择,然后是插入。 我已经看到,我可以使用Version-Property执行此操作 - 但我无法更改Database-Schema。
感谢您的帮助。
答案 0 :(得分:0)
我认为你应该删除属性unsaved-value =&#34; 0&#34;。 当你保存实体时,Nhibernate会将id与&#39; 0&#39;进行比较。 如果不相等,Nhibernate会先选择它,如果它不在会话中。
答案 1 :(得分:0)
我认为您可以使用session.Update()而不是session.Merge(),它不会从DB加载实体。或者,您可以在所有情况下使用session.SaveOrUpdate()。
答案 2 :(得分:0)
如果您想永远保存,也许您可以尝试:
<id name="Id" column="TBADRPERSON_ID" type="Int32" unsaved-value="any">
<generator class="assigned"/>
</id>
然后为Insert()执行Session.SaveOrUpdate(),然后为Update()执行Session.SaveOrUpdate()