Если вы сохраняете идентификатор и снова используете его для доступа к клиенту (например, в URL-адресе), рассмотрите возможность создания нового поля, содержащего для этого токен, который станет бизнес-ключом. Поскольку это не идентификатор, легко создать новый экземпляр сущности и скопировать токен (вам, вероятно, потребуется удалить токен из старого).

ы можете изменить подтип строки в NHibernate? Например, если у меня есть сущность Customer и подкласс TierOneCustomer, у меня есть случай, когда мне нужно изменить Customer на TierOneCustomer, но у TierOneCustomer должен быть тот же Id (PK), что и у исходной сущности Customer.

Отображение выглядит примерно так:

<class name="Customer" table="SiteCustomer" discriminator-value="C">
  <id name="Id" column="Id" type="Int64">
    <generator class="identity" />
  </id>
  <discriminator column="CustomerType" />
  ... properties snipped ...

  <subclass name="TierOneCustomer" discriminator-value="P">
    ... more properties ...
  </subclass>
</class>

Я использую модель иерархии по одной таблице для каждого класса, поэтому при использовании plain-sql нужно просто обновить sql дискриминатора (CustomerType) и установить соответствующие столбцы, соответствующие типу. Я не могу найти решение в NHibernate, поэтому буду признателен за любые указатели.

Я также думаю о том, является ли модель правильной, учитывая этот вариант использования, но прежде чем идти по этому пути, я хочу убедиться, что выполнение, как описано выше, действительно возможно в первую очередь. Если нет, я почти наверняка подумаю о смене модели.

Ответы на вопрос(4)

Ваш ответ на вопрос