耗尽NHibernate HiLo-id导致负数

我们正在运行一个ASP.NET数据库应用程序,它使用HiLo为实体生成ID。在此应用程序之上,我们有几个使用相同数据库的网站。我们看到的是我们用完了ID而ID列变成了负数。 我们怀疑这与发电机有关。由于多个网站运行在相同的代码库和数据库之上,并且可能HiLo算法很快就会开始生成超出bigint范围的ID(当然很快就是相对的)。 是否有可能以这样的方式配置生成器:它还使用Id序列中的间隙(其中有很多),而不是在认为必要时直接增加值? 这会是一个解决方案吗?或者我们应该完全做其他事情?     
已邀请:
如果可能,您可以切换到Guid.Comb生成器或使用int64作为ID。看看这里做出关于使用什么发电机的最终决定。     
你的max_lo设置为什么? 生成id的公式如下 h =高序列(从0开始) l_size =低块的大小 l =低序列(从1开始) ID = h * l_size + l 也许你的max_lo设置为高?     
我遇到了同样的问题,但也找不到合适的答案。 我们还有一个站点作为单独的网站运行,每个站点都在自己独立的应用程序池中,所有站点都在同一个Web服务器上。 实际上,如果你的数据库支持它,你最好只需切换到身份映射。它应该不会太难,您应该能够使用一些TSQL修改数据库模式,并使用一些搜索/替换来修改ID映射。 您的应用程序中是否有与UoW类似的概念?因为身份生成的缺点是它会破坏UoW(早期插入以获取标识符)。不过,这可能是值得付出的代价。 在我的情况下,系统可以很容易地作为单个站点/应用程序池存在(它是单个数据库上的多租户,具有单个共享连接字符串,并且设计为在Web服务器上作为单个实例运行)所以我将要测试之前我跳转到数据库标识..     

要回复问题请先登录注册