NHibernate HiLo在列上其他那个主键

时间:2012-07-06 08:18:43

标签: nhibernate

任何人都会遇到在主键以外的列上实现hilo类型解决方案的方法。有一个像jobno这样的专栏,我不想成为主键(如使用guidcomb并对它感到满意),并且需要有一个序列号,并且不想点击db来获取下一个价值。

1 个答案:

答案 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值。