如何指示 Nhibernate 生成顺序的一步主键,如 sql 生成的主键?
当前的 HiLo 算法会生成 4001 然后 5010、6089 等密钥。我知道这是为了管理多个应用服务器等。但我没有这个问题。
我需要 nhibernate 在启动期间获取最高记录集值(比如 15),然后使用主键 16 生成下一条记录(非常类似于从 sql 端生成的 id)。
如何指示 Nhibernate 生成顺序的一步主键,如 sql 生成的主键?
当前的 HiLo 算法会生成 4001 然后 5010、6089 等密钥。我知道这是为了管理多个应用服务器等。但我没有这个问题。
我需要 nhibernate 在启动期间获取最高记录集值(比如 15),然后使用主键 16 生成下一条记录(非常类似于从 sql 端生成的 id)。
为什么您需要/期望 NHibernate 为您执行此操作?
NHibernate 很难为这样的场景提供一个通用的解决方案,因为需求可能会略有不同,但是由于您完全了解您的特定约束,因此您应该相对直接地提供自己的解决方案(使用手动分配的 id )。
在应用程序启动时,查询数据库并获取当前的最大 id 值。每次插入时增加该值。
创建表:
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'"));
}
}