Oracle数据库的NHibernate <timestamp>映射导致StaleStateException </timestamp>

时间:2010-12-21 06:24:43

标签: oracle nhibernate timestamp optimistic-locking

我们有一个NHibernate应用程序,我们正在从SQL Server迁移到Oracle。我们的乐观并发是通过<timestamp name="Version">映射元素实现的。

Oracle中相应Version列的数据类型为DATE。保存对象后,内存中的C#对象留下时间戳值(以毫秒为单位)(例如12:34:56.789),而数据库中的值仅精确到秒(例如12:34:56)。因此,如果我们第二次尝试保存对象,我们会得到一个StaleStateException,因为这两个值不匹配。

我尝试通过将Version列的数据类型更改为TIMESTAMP(3)来解决此问题。不幸的是,C#对象和DB值仍然偏离一毫秒(例如12:34:56.789对比12:34:56.788),因此第二次尝试保存对象仍会导致StaleStateException。

如何创建<timestamp>到[{1}}或DATE类型的Oracle列的映射,以便可以多次保存同一个对象?

感谢。

- Brian

1 个答案:

答案 0 :(得分:4)

TIMESTAMP(7)具有与.NET DateTime类匹配的正确精度并修复了问题。