NHibernate HiLo Generator

Why use HiLo

HiLo idnentity generatos allows NHibernate to generate identity values to map child objects to their parent without having to hit the database as opposed to using the native identity generation causes nhibernate to hit the database on every save, which affects performance and running of batch statements.

For more information on generator behaviours refer to this blog post by Fabio Maulo.

Using HiLo Id generation

In your Infrastructure project, under NHibernateMaps:

public class PrimaryKeyConvention : IIdConvention
{
    public void Apply(FluentNHibernate.Conventions.Instances.IIdentityInstance instance)
    {
        instance.Column(instance.EntityType.Name + "Id");
        instance.UnsavedValue("0");
        instance.GeneratedBy.HiLo("1000");
    }
}

Create the following table:

CREATE TABLE [dbo].[hibernate_unique_key](
       [next_hi] [int] NOT NULL
        ) ON [PRIMARY]

Populate the column with a number to seed and you’re done.