Nhibernate id用​​连续的一步递增id(HiLo的替代品)

时间:2010-05-20 11:40:10

标签: nhibernate orm hilo

如何指示Nhibernate生成顺序一步主键,如sql生成的主键?

当前的HiLo算法生成4001然后5010,6089等密钥。我知道这是管理多个应用服务器等。但我没有这个问题。
我需要nhibernate在启动期间(例如15)获取最高记录设置值,然后使用主键16生成下一条记录(非常类似于sql方面生成的id)。

2 个答案:

答案 0 :(得分:1)

为什么你需要/期望NHibernate为你做这个?

NHibernate很难为这样的场景提供通用的解决方案,因为需求可能会有所不同,但由于您确切知道您的特定约束,因此您应该相对直截了当地提供自己的解决方案(使用手动分配的ids)。

在应用程序启动时,查询数据库并获取当前的最大id值。每次插入时增加该值。

答案 1 :(得分:1)

创建表格:

CREATE TABLE `seq` (
  `ID` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `HI` bigint(20) unsigned NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `seq` VALUES ('COMMENT', '0');
INSERT INTO `seq` VALUES ('POST', '0');
INSERT INTO `seq` VALUES ('USER', '0');

使用FluentNHbiernate添加这样的映射:

    public class Comment_Map : ClassMap<Comment>
    {
        public Comment_Map()
        {
            Table("COMMENT");

            Id(x => x.ID, "ID").GeneratedBy.HiLo("SEQ", "HI", "0", o => o.AddParam("where", "ID = 'COMMENT'"));
        }
     }