SaveOrUpdate与NHibernate中的更新和保存

时间:2009-07-19 20:45:53

标签: nhibernate

NHibernate中的SaveOrUpdate和Save / Update有什么区别。为什么你总是不使用SaveOrUpdate?另外,SaveOrUpdateCopy有什么意义?

1 个答案:

答案 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()即可完成所需的一切。