Возможно ли иметь составной идентификатор, который можно редактировать в NHibernate?

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

хуже бизнес-логики требует, чтобы они были изменчивыми.

Я использую nhibernate и у меня нет проблем с отображением загрузки / сохранения. Однако мне нужно иметь возможность обновлять значения свойств и отражать эти изменения в БД при вызове update.

Это устаревшая система, поэтому нет никаких изменений в структуре БД (это ужасно).

Могу ли я что-нибудь сделать с nhibernate, чтобы решить эту проблему? разрешает ли nhibernate изменять ключи.

Я использую: .net4.0, nhibernate 2.1, fluentnh 1.0 и SQL Server в качестве бэкэнда.

2 ответа

Решение

Вы не можете изменить ПК с помощью NHibernate. Как вы уже поняли, структура, с которой вы имеете дело, просто ужасна.

Что вы можете сделать, это использовать SQL-запросы для изменения PK. Имейте в виду, что вам придется перезагрузить объект с новым идентификатором, прежде чем использовать его снова.

На самом деле вы не обязаны отображать схему базы данных как есть на объект домена.

У меня есть приложение с объектной структурой, которая не может быть реально представлена ​​в базе данных, и NHibernate понимает семантику: для этого потребуется составной идентификатор из 3 столбцов, но суть в том, что есть случаи, когда 2 столбца изменяются. Поэтому я сопоставил одно свойство столбца как PK, автоматизировал использование двух других и получил лучшее из двух миров.

Обратите внимание, что в этих случаях кэширование 2-го уровня является большим нет-нет!

Другие вопросы по тегам