我们有一个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
答案 0 :(得分:4)
TIMESTAMP(7)具有与.NET DateTime类匹配的正确精度并修复了问题。