问题是你在使用
SaveOrUpdateCopy
. 这里发生的是
existingDocument
不用于持久化到数据库。
http://nhibernate.info/doc/nh/en/index.html#manipulatingdata-updating-detached
:
最后一种情况可以通过使用
SaveOrUpdateCopy(Object o)
. 此方法将给定对象的状态复制到具有相同标识符的持久对象上。如果当前没有与会话关联的持久实例,则将加载该实例。方法返回持久实例。如果给定实例未保存或不存在于数据库中,NHibernate将保存该实例并将其作为新的持久实例返回。否则,给定实例不会与会话关联。在大多数具有分离对象的应用程序中,您需要两种方法,
SaveOrUpdate()
SaveOrUpdateCopy()
.
这意味着
现有文档
那我们能做什么呢。有几个选择:
-
保存或更新副本
应该是正确的
Document
. 您可以将代码更改为:
existingDocument = (Document)session.SaveOrUpdateCopy(existingDocument);
-
SaveOrUpdate
. 现在,我想有一个非常具体的原因,这对你来说可能是不可能的,因为你特别选择了
保存或更新副本
保存或更新
是你通常使用的东西;
-
文件
保存或更新副本
,你可以放:
var existingDocument = FetchDocumentFromDatabase(someDocumentGuidId);
-
如果你正在使用
保存或更新副本
因为
来自不同的地方
ISession
,也可以选择重新连接
现有文档
到目前为止
使用
Lock()
. 在你“锁定”了
进入新的
,您可以使用
而不是
这个例子,包括
Comment
Guid
将被分配。