Если вы сохраняете идентификатор и снова используете его для доступа к клиенту (например, в 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, поэтому буду признателен за любые указатели.
Я также думаю о том, является ли модель правильной, учитывая этот вариант использования, но прежде чем идти по этому пути, я хочу убедиться, что выполнение, как описано выше, действительно возможно в первую очередь. Если нет, я почти наверняка подумаю о смене модели.