NHibernate 应如何更新映射为版本的属性

2024-05-06

使用流畅的 NHibernate 我在使用映射的类上有一个属性Version

Version(x => x.Version);

当我保存对象时,Version 属性会按照我的预期在数据库中递增,但对象上的属性值似乎只是有时会发生变化。

using (var tx = session.BeginTransaction())
{
    session.Merge(item);
    tx.Commit();

    item.Version;  // Sometimes this is still 1, when I expect it to be 2.
}

问题是,如果它保持为 1 并且我进行更多更改并再次保存,我会收到 StaleObjectStateException。

奇怪的是,有时它工作正常,并且 item.Version 值确实会正确增加,但我无法弄清楚它执行的情况和不执行的情况之间的区别。

我尝试过搜索,但似乎找不到任何有关此的文档。谁能解释一下 NHibernate 的版本映射预期行为是什么?

[NHibernate版本2.1.2]


来自ISession.Merge文档:

将给定对象的状态复制到具有相同标识符的持久对象上。如果当前没有与会话关联的持久实例,则会加载该实例。返回持久化实例。如果给定实例未保存,则保存其副本并将其作为新的持久实例返回。给定实例不会与会话关联。

所以,它会not modify item.

(我可能会补充说我从未使用过Merge在我的应用程序中。您可能想回顾一下如何处理附加和分离实体)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NHibernate 应如何更新映射为版本的属性 的相关文章

随机推荐