我将NHibernate与存储库模式一起使用。存储库有方法Insert()和Update()。现在,Insert()调用Session.Save(entity),Update()调用Session.Merge(entity)。My Entities为PrimaryKey提供了休眠映射:
<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。
谢谢你的帮助。
发布于 2012-03-27 21:41:21
如果你想总是保存,也许你可以试试:
<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-27 20:52:09
我认为您应该删除属性unsaved-value="0“。当你保存实体时,Nhibernate会将id与'0‘进行比较。如果不相等,如果它不在会话中,Nhibernate将首先选择它。
发布于 2012-03-27 20:54:40
我认为您可以使用session.Update()而不是session.Merge(),它不会从DB加载实体。或者,您可以在所有情况下使用session.SaveOrUpdate()。
https://stackoverflow.com/questions/9889614
复制相似问题