Я думаю, что вопрос - сложный код немного лучше? Это быстрее, более надежно? Цель состоит в том, чтобы записать лучшие программы, если сложный код является лучшим решением тогда, просто необходимо записать лучшие комментарии так, чтобы преемник мог управлять кодом в будущем. В принципале код должен быть максимально простым в любой данной ситуации.
Если это вопрос о переносе существующего приложения в hilos, который ранее использовал автоматические идентификаторы, и в нем есть старые данные, которые необходимо перенести ... тогда это будет мой лучший выбор (хотя не пробовал! - комментарии приветствуются!):
Если, конечно, это решает только проблемы со столбцом идентификаторов, а не что-либо еще в вашем схему, которую может потребоваться изменить, если вы перемещаете приложение в NHibernate.
Вам необходимо настроить таблицу, используемую NH, чтобы правильно создавать значения HiLo. Позвольте Schema Creator создать таблицу в соответствии с вашими определениями сопоставления, установить значения в соответствии с текущим состоянием идентификаторов в вашей базе данных.
Я считаю (вам необходимо это проверить), что значения, сгенерированные hilo, вычисляются следующим образом:
hilo-id = high-value * max_lo + low-value
Пока максимальное значение хранится в базе данных, max_low определяется в файле сопоставления, а низкое значение вычисляется во время выполнения.
hilo-id = high-value * max_lo + low-value
1263] NHibernate также требуется собственное соединение и транзакция для определения и увеличения высокого значения. Следовательно, он не работает, если соединение предоставляется приложением.
Вы все еще можете использовать seqhilo
, NH использует последовательность базы данных для создания следующих высоких значений и не требует отдельного подключения для этого . Это доступно только в базах данных, поддерживающих последовательности, таких как Oracle.
Исправление:
Между тем, мне пришлось реализовать это самому (раньше это было просто теорией :-). Итак, я возвращаюсь, чтобы поделиться подробностями.
Формула:
next_hi = (highest_id / (maxLow + 1)) + 1
next_hi
- это поле в базе данных, которое вам нужно обновить. high_id
- это самый высокий идентификатор, найденный в вашей базе данных. maxLow
- это значение, которое вы указали в файле сопоставления. Понятия не имею, почему он увеличивается на единицу. Деление представляет собой целочисленное деление, при котором десятичные знаки обрезаются.
high_id
- это самый высокий идентификатор, найденный в вашей базе данных. maxLow
- это значение, которое вы указали в файле сопоставления. Понятия не имею, почему он увеличивается на единицу. Деление представляет собой целочисленное деление, при котором десятичные знаки обрезаются. high_id
- это самый высокий идентификатор, найденный в вашей базе данных. maxLow
- это значение, которое вы указали в файле сопоставления. Понятия не имею, почему он увеличивается на единицу. Деление представляет собой целочисленное деление, при котором десятичные знаки обрезаются.