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 идентификаторов!)