Fluent NHibernate - семена next_hi, специфичные для класса / сущности, при использовании генератора HiLo

В основном я пытаюсь сделать то же самое, что и этот вопрос, но с Fluent NHibernate.

Вот мое соглашение по генерации идентификаторов:

    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_hi а также order_next_hiПредполагая, что это работает на основе столбцов. Если это основано на строке, то это тоже хорошо, при условии, что каждая сущность знает, какую строку использовать для этого next_hi значение.

3 ответа

Решение

Я также задал этот вопрос в группе Google Fluent NHibernate, и похоже, что единственный способ сделать это - создать собственный класс генератора идентификаторов, который наследуется от HiLo или TableGenerator. Исходя из того, что я понял, ключевая проблема заключается в том, что оператор SQL для создания таблицы начальных значений выполняется только один раз, и в нем нет встроенного переопределения или перехвата, чтобы заставить его создавать специфичные для сущности столбцы или строки.

Итак, что-то в этом роде - это то, что мне нужно сделать. Я опубликую больше, как только у меня будет рабочая реализация.

Есть хорошее решение этой проблемы, опубликованное в блоге Энтони Дьюирта здесь: http://www.anthonydewhirst.blogspot.co.uk/2012/02/fluent-nhibernate-solution-to-enable.html

Интересный вопрос, но мне интересно, почему вы хотите это сделать? Что касается (довольно незначительного) недостатка, вы будете генерировать больше запросов к базе данных. С другой стороны, вы бы увеличили свое пространство суррогатного удостоверения личности на некоторый фактор. Но не достаточно ли Long/BigInt для них всех вместе взятых? (максимум 18 446 744 073 709 551 615 идентификаторов!)

Другие вопросы по тегам