任何人都会遇到在主键以外的列上实现hilo类型解决方案的方法。有一个像jobno这样的专栏,我不想成为主键(如使用guidcomb并对它感到满意),并且需要有一个序列号,并且不想点击db来获取下一个价值。
答案 0 :(得分:2)
我不知道任何“开箱即用”的东西,但你可以创建一个NHibernate.Id.TableHiLoGenerator的实例(NHibernate用它来生成id值)并用它来生成值。但是,您仍需要手动设置实体的生成值。
您也可以通过继承TableHiLoGenerator来执行自己的生成器:
public class MyHiLoGenerator : TableHiLoGenerator
{
private readonly ISessionFactory _sessionFactory;
public MyHiLoGenerator(ISessionFactory sessionFactory)
{
_sessionFactory = sessionFactory;
Configure(NHibernateUtil.Int64, new Dictionary<string, string> {{"table", "mytable"}, {"column", "mycolumn"}}, ((SessionFactoryImpl) sessionFactory).Dialect);
}
public long NextValue()
{
return (long) Generate((ISessionImplementor) _sessionFactory.GetCurrentSession(), null);
}
}
这只是一个没有经过测试的快速示例,但它仍然显示了如何使用TableHiLoGenerator的想法。我用这样的东西自己生成HiLo值。