1

我将 NHibernate 与存储库模式一起使用。存储库具有方法 Insert() 和 Update()。现在,Insert() 调用 Session.Save(entity) 和 Update() 调用 Session.Merge(entity)。我的实体具有 PrimaryKey 的休闲映射:

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

id是我分配的。现在, Session.Save(entity) 首先执行 Select 以查看实体是新的还是已经存在的。但是在 Insert()-Case 中,实体总是新的。我现在正在寻找一种方法来告诉 NHibernate 始终执行插入 - 而不是首先选择然后插入。我已经看到,我可以使用 Version-Property 来做到这一点 - 但我无法更改 Database-Schema。

谢谢你的帮助。

4

3 回答 3

0

我认为您应该删除属性 unsaved-value="0"。当您保存实体时,Nhibernate 会将 id 与“0”进行比较。如果不相等,如果它不在会话中,则 Nhibernate 首先选择它。

于 2012-03-27T12:52:08.827 回答
0

我认为您可以使用 session.Update() 而不是 session.Merge(),它不会从数据库加载实体。或者,您可以在所有情况下使用 session.SaveOrUpdate()。

于 2012-03-27T12:54:39.787 回答
0

如果您想始终保存,也许您可​​以尝试:

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

然后为 Insert() 执行 Session.SaveOrUpdate(),为 Update() 执行 Session.Merge() 然后 Session.SaveOrUpdate()

于 2012-03-27T13:41:21.230 回答