Разрешение базе данных выбрать первичный ключ в nhibernate - PullRequest
1 голос
/ 16 марта 2009

Как мне просто позволить MySQL назначить первичный ключ для вставленного объекта с помощью nhibernate? Кажется, я бы хотел установить генератор как тип «identity», но в документации говорится, что с помощью этого «..require [s] два SQL-запроса вставьте новый объект». Зачем это делать? Есть ли способ получить это функционирование, как обычный SQL-оператор вставки?

Ответы [ 2 ]

2 голосов
/ 16 марта 2009

Существует очевидное преимущество: разрешение NHibernate использовать Guids или Hilo в качестве генератора идентификаторов обеспечит чрезвычайно интересную функцию в NHibernate: пакетирование. Просто настройте NHibernate для использования пакетной обработки (например, для 1000 операторов), и ваши вставки внезапно будут очень быстрыми.

У Фабио есть пост о различных доступных генераторах здесь - чрезвычайно полезное чтение, если вы используете NHibernate (или если вы знаете кого-то, кто думает, что NHibernate работает плохо).

2 голосов
/ 16 марта 2009

Причина, по которой требуется два запроса, заключается в том, что для идентификатора значение столбца не определяется до тех пор, пока не будет вставлена ​​строка. Поэтому для получения значения столбца для вставленного объекта требуется выбрать после вставки. Это довольно стандартно, и я бы не позволил ему остановить использование автоматически сгенерированных ключей в качестве моего первичного ключа. Другой вариант - предварительно сгенерировать ключ - скажем, GUID для нового объекта перед сохранением его в базе данных. По большей части я не вижу в этом преимущества, если нет других смягчающих обстоятельств, таких как необходимость объединения данных из отдельных баз данных, где могут возникать конфликты автоматически сгенерированных ключей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...