NHibernate中的SaveOrUpdate和Save / Update有什么区别。为什么你总是不使用SaveOrUpdate?另外,SaveOrUpdateCopy有什么意义?
答案 0 :(得分:71)
第9章比我能更好地涵盖所有这些:
http://nhibernate.info/doc/nh/en/index.html
但悬崖说明:
Save()
获取一个没有标识符的新对象,并将其附加到会话中。该对象将为INSERT
'd。
Update()
获取具有标识符但不在会话中的现有对象,并将其附加到会话中。该对象将为UPDATE
'd。
SaveOrUpdate()
查看标识符并确定上述内容的必要条件。
SaveOrUpdateCopy()
的特殊之处在于,您有两个具有相同标识符的对象 - 一个在会话中,一个不在。如果您尝试update
不在会话中的那个,则会正常抛出异常(您现在正尝试将两个表示相同持久对象的对象附加到会话中)。 SaveOrUpdateCopy()
将非会话对象状态复制到会话对象状态。
我不确定你将如何使用NH,但在很多情况下你需要的只是Save()
。该会话正在完成所有必要的工作,以了解必须更新的内容,只需Flush()
或Commit()
即可完成所需的一切。