告诉NHibernate执行Insert-Statement

时间:2012-03-27 12:35:07

标签: c# sql-server-2008 nhibernate crud nhibernate-3

我将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。

感谢您的帮助。

3 个答案:

答案 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()