c# – NHibernate如何确定是否插入或更新记录?

使用Session.SaveOrUpdate(myEntity)时; NHibernate如何决定是插入新记录还是更新现有记录?

我在S#arp项目中保存一个对象时遇到了麻烦.它从存储中检索,然后以会话状态存储几个Web请求,然后保存回数据库,其中一个属性已更改(不是S#arp [DomainSignature]).

我在运行时使用Equals()方法直接从数据库中比较即将持久化的对象和刚刚检索到的版本,并返回true.但是,该对象仍然最终在数据库中创建一个新行.

在应用程序的其他地方,这工作正常,但我希望指出NHib如何解决这个问题.

最佳答案 基本上SaveOrUpdate()正在寻找一个标识符.如果存在标识符,它将更新数据库中的记录.如果标识符不存在,则会创建新记录.

但是,听起来你的会话中可能会有一些时髦的东西.您可能想尝试SaveOrUpdateCopy()来查看这是否解决了您的问题.

点赞