首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >告诉NHibernate执行Insert语句

告诉NHibernate执行Insert语句
EN

Stack Overflow用户
提问于 2012-03-27 20:35:07
回答 3查看 824关注 0票数 1

我将NHibernate与存储库模式一起使用。存储库有方法Insert()和Update()。现在,Insert()调用Session.Save(entity),Update()调用Session.Merge(entity)。My Entities为PrimaryKey提供了休眠映射:

代码语言:javascript
复制
    <id name="Id" column="TBADRPERSON_ID" type="Int32" unsaved-value="0">       
                    <generator class="assigned"/>
    </id>

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

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-27 21:41:21

如果你想总是保存,也许你可以试试:

代码语言:javascript
复制
<id name="Id" column="TBADRPERSON_ID" type="Int32" unsaved-value="any">       
                <generator class="assigned"/>
</id>

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

票数 0
EN

Stack Overflow用户

发布于 2012-03-27 20:52:09

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

票数 0
EN

Stack Overflow用户

发布于 2012-03-27 20:54:40

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9889614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档