2

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

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

4

2 回答 2

1

为什么您需要/期望 NHibernate 为您执行此操作?

NHibernate 很难为这样的场景提供一个通用的解决方案,因为需求可能会略有不同,但是由于您完全了解您的特定约束,因此您应该相对直接地提供自己的解决方案(使用手动分配的 id )。

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

于 2010-05-20T12:11:34.393 回答
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'"));
        }
     }
于 2010-05-20T13:52:42.050 回答