Я обнаружил, что лучший способ выполнить эти задачи - записать их в коде, а не просочиться в слой данных. Я не позволяю NHibernate рассчитать это. Я рассматриваю эту концепцию как полноценную функцию приложения. Это хорошо, потому что я могу написать тесты для этого и иметь гибкость. Иногда существуют другие факторы, связанные с вычислением следующего порядкового номера, например, отношение к другому объекту. Возможно, вам нужны последовательные номера заказов в пределах области клиента: 02-001, 02-002 для клиента 02 и 01-001, 01-002 для клиента 01.
Итак, я продвигаю концепцию SequneceNumber для объекта модели предметной области, сопоставляю его с NHibernate и выполняю логику на моей стороне. Всякий раз, когда мне нужен новый, я использую интерфейс, который выглядит примерно так:
public interface ISequenceRepository
{
string GetNextSequenceNumber(Customer customer);
}
И он управляет текущим порядковым номером в одной записи (на клиента) в таблице базы данных. Всякий раз, когда я вызываю эту функцию, она увеличивает указатель в базе данных и возвращает значение.
Фабрика зависит от этого интерфейса и использует его для создания объектов, которым требуется порядковый номер.