流利的NHibernate - 使用HiLo生成器时类/实体特定的next_hi种子

时间:2009-09-09 14:50:13

标签: fluent-nhibernate hilo

基本上我正在尝试与this question做同样的事情但是使用Fluent NHibernate。

这是我的id生成惯例:

    public class IdGenerationConvention : IIdConvention
    {
            public void Apply(IIdentityInstance instance)
            {
                    instance.GeneratedBy.HiLo("1000");
            }
    }

现在这很好用,但所有类最终都使用相同的next_hi

    create table hibernate_unique_key (
            next_hi INTEGER 
    )

有谁知道如何指定每个类应该使用它自己的next_hi

为了澄清,我希望最终得到类似customer_next_hiorder_next_hi的内容,假设它基于列工作。如果它基于行,那么也可以,只要每个实体都知道要使用哪一行next_hi值。

3 个答案:

答案 0 :(得分:1)

在Anthony Dewhirt的博客上发布了一个很好的解决方案:http://www.anthonydewhirst.blogspot.co.uk/2012/02/fluent-nhibernate-solution-to-enable.html

答案 1 :(得分:0)

我还在Fluent NHibernate Google Group中提出了这个问题,看来这样做的唯一方法就是创建一个继承自HiLo或TableGenerator的自定义id生成器类。从我收集的内容来看,关键问题是创建种子表的SQL语句只执行一次,并且没有内置的覆盖或挂钩来使其创建特定于实体的列或行。

所以我需要做this这样的事情。一旦我有一个有效的实施,我会发布更多。

答案 2 :(得分:0)

有趣的问题,但我想知道你为什么要这样做?在(相当小的)缺点上,您将生成更多的数据库请求。从好的方面来说,你会增加你的替代ID空间。但是不是Long / BigInt足以让他们全部合并吗? (最多18,446,744,073,709,551,615 ids!)