2010-08-09 2 views
0

Я использовал генератор класса assigned, чтобы назначить значения моего первичного ключа. Я прочитал несколько блогов, в которых говорится, что hilo лучше. Есть ли польза от assigned по сравнению с hilo?классы генераторов NHibernate

+0

Что лучше зависит от того, как вы используете назначенное. Что вы назначаете? – Paco

+0

@Paco: Первичные ключи. – 2010-08-09 20:48:53

ответ

3

assigned полезен, если вы хотите определить первичный ключ самостоятельно.

Если вы получаете значение откуда-то, например, из другой базы данных или импортированного файла, может оказаться полезным assigned. Но тогда это, безусловно, ориентир, а не целое число. Вы также можете использовать естественные первичные ключи, которые одновременно являются бизнес-данными и первичным ключом. Хотя это не рекомендуется.

Я бы сказал, assigned предназначен для особых случаев, а не для обычных применений. Обычно вы используете искусственные ключи, поэтому вам не важно точное значение. Создание значения самостоятельно может быть затруднено, по крайней мере, когда вы рассматриваете несколько процессов, использующих одну и ту же базу данных.

Существует большое различие между assigned и (большинством?) Другими генераторами id. assigned ключи не предоставляются NHibernate или базой данных. NHibernate обычно знает, если объект уже находится в базе данных, оценивая идентификатор. Когда вы назначаете его самостоятельно, вам также необходимо знать себя, нужно ли вставлять или обновлять объект. Это делает этот генератор id особенным. Ваш код будет выглядеть иначе, если вы используете assigned, как при использовании любого другого генератора идентификаторов.

+0

, так что я могу изменить файлы hbm.xml для использования генератора 'hilo' и удалить экземпляры установки первичного ключа в моих сущностях? – 2010-08-09 20:29:24

+1

Да, когда вы используете 'hilo' (или любой другой генератор, кроме' назначенного'), вам не нужно генерировать первичный ключ самостоятельно. Первичный ключ устанавливается в момент, когда объект помещается в сеанс (например, при вызове Update, Merge, SaveOrUpdate). Хило (в большинстве случаев) не нуждается в обращении к базе данных для генерации идентификатора. (Если вы сами установили hilo-generated id, вы испытаете странное поведение ...) –

Смежные вопросы