Возможно ли иметь составной идентификатор, который можно редактировать в NHibernate?
У меня есть ситуация, когда у меня есть таблицы, которые имеют много столбцов, используемых в качестве составного первичного ключа,
хуже бизнес-логики требует, чтобы они были изменчивыми.
Я использую nhibernate и у меня нет проблем с отображением загрузки / сохранения. Однако мне нужно иметь возможность обновлять значения свойств и отражать эти изменения в БД при вызове update.
Это устаревшая система, поэтому нет никаких изменений в структуре БД (это ужасно).
Могу ли я что-нибудь сделать с nhibernate, чтобы решить эту проблему? разрешает ли nhibernate изменять ключи.
Я использую: .net4.0, nhibernate 2.1, fluentnh 1.0 и SQL Server в качестве бэкэнда.
2 ответа
Вы не можете изменить ПК с помощью NHibernate. Как вы уже поняли, структура, с которой вы имеете дело, просто ужасна.
Что вы можете сделать, это использовать SQL-запросы для изменения PK. Имейте в виду, что вам придется перезагрузить объект с новым идентификатором, прежде чем использовать его снова.
На самом деле вы не обязаны отображать схему базы данных как есть на объект домена.
У меня есть приложение с объектной структурой, которая не может быть реально представлена в базе данных, и NHibernate понимает семантику: для этого потребуется составной идентификатор из 3 столбцов, но суть в том, что есть случаи, когда 2 столбца изменяются. Поэтому я сопоставил одно свойство столбца как PK, автоматизировал использование двух других и получил лучшее из двух миров.
Обратите внимание, что в этих случаях кэширование 2-го уровня является большим нет-нет!