В разделе NHibernate ID Generator в файлах сопоставления, что означает assigned и select?

#c# #nhibernate #orm #id-generation

#c# #nhibernate #orm #генерация идентификатора

Вопрос:

В NHibernate разделе ID Generator в файлах сопоставления, что означает assigned и select?

Ответ №1:

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

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

Ответ №2:

Есть идентификатор / последовательность и assigned. Из документации NH:

5.1.5.1. генератор

Для баз данных, которые поддерживают столбцы идентификаторов (DB2, MySQL, Sybase, MS SQL), вы можете использовать генерацию ключа идентификации. Для баз данных, которые поддерживают последовательности (DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB), вы можете использовать генерацию ключей в стиле последовательности. Обе эти стратегии требуют двух SQL-запросов для вставки нового объекта.

uid_sequence Для кроссплатформенной разработки собственная стратегия будет выбирать из стратегий идентификации, последовательности и hilo, в зависимости от возможностей базовой базы данных.

5.1.5.7. Назначенные идентификаторы

Если вы хотите, чтобы приложение назначало идентификаторы (в отличие от NHibernate, генерирующего их), вы можете использовать назначенный генератор. Этот специальный генератор будет использовать значение идентификатора, уже присвоенное свойству identifier объекта. Будьте очень осторожны при использовании этой функции для назначения ключей с бизнес-значением (почти всегда ужасное дизайнерское решение).

Из-за присущей ему природы объекты, использующие этот генератор, не могут быть сохранены с помощью метода saveOrUpdate() ISession. Вместо этого вы должны явно указать NHibernate, должен ли объект быть сохранен или обновлен, вызвав метод Save() или Update() ISession.