如何指示Nhibernate生成顺序一步主键,如sql生成的主键?
当前的HiLo算法生成4001然后5010,6089等密钥。我知道这是管理多个应用服务器等。但我没有这个问题。
我需要nhibernate在启动期间(例如15)获取最高记录设置值,然后使用主键16生成下一条记录(非常类似于sql方面生成的id)。
答案 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'"));
}
}