Jac*_*yan 15 nhibernate identity sequence hilo
我使用的数据库严重依赖于标识列.但是,由于我们现在已将所有应用程序移至NHibernate,因此我希望使用HiLo,因为似乎建议使用NHibernate.是否有任何策略可以做到这一点,或者需要注意哪些常见问题?
Ste*_*ger 14
您需要设置NH使用的表格才能正确创建HiLo值.让Schema Creator根据您的映射定义创建表,根据数据库中id的当前状态设置值.
我相信(你需要验证这一点)hilo生成的值是通过以下公式计算的:
hilo-id = high-value * max_lo + low-value
Run Code Online (Sandbox Code Playgroud)
虽然高值存储在数据库中,但max_low在映射文件中定义,而低值在运行时计算.
NHibernate还需要自己的连接和事务来确定和增加高值.因此,如果应用程序提供连接,则它不起作用.
您仍然可以使用seqhilo,NH使用数据库序列来创建下一个高值,并且不需要单独的连接来执行此操作.这仅适用于支持序列的数据库,如Oracle.
更正:
与此同时,我必须自己实施(之前,它只是理论:-).所以我回来分享细节.
公式是:
next_hi = (highest_id / (maxLow + 1)) + 1
Run Code Online (Sandbox Code Playgroud)
next_hi是您需要更新的数据库中的字段.highest_id是数据库中找到的最高ID.maxLow是您在映射文件中指定的值.不知道为什么它会增加一个.除法是整数分割,它截断小数位.
如果这是一个关于将现有应用程序迁移到以前使用过自动ID的hilos的问题,并且其中有旧数据需要迁移...那么这将是我最好的选择(尽管不尝试! - 欢迎评论!) :
如果当然这只解决了标识列的问题,而不是在您将应用程序移动到NHibernate时可能需要更改的架构中的任何其他内容.
| 归档时间: |
|
| 查看次数: |
2224 次 |
| 最近记录: |