Это работает для меня:
public class Potato
{
public virtual Guid Id { get; protected set; }
public virtual int LegacyId { get; protected set; }
}
public class PotatoMap : ClassMap<Potato>
{
public PotatoMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.LegacyId).CustomSqlType("INT IDENTITY(1,1)").Not.Nullable().ReadOnly().Generated.Insert();
}
}
По сути, целое число настроено для создания базы данных, и NHibernate получает указание извлечь его по вставкам.
Важно отметить, что сопоставление составляет только половину ответа, и оно будет не работать, если столбец не создан как IDENTITY. CustomSqlType добавлен в отображение с целью создания правильного sql при генерации таблиц с SchemaExport. Это сгенерированный sql:
create table [Potato] (
Id UNIQUEIDENTIFIER not null,
LegacyId INT IDENTITY(1,1) not null,
primary key (Id)
)
С другой стороны, ReadOnly и Generated.Insert () сообщат NHibernate о том, что значение автоматически генерируется базой данных только при вставках, и поэтому оно должно запрашивать базу данных о значении при каждой вставке.
Обратите внимание, что я проверял это только с Sql Server. Пользовательский тип, вероятно, изменится или может быть недоступен в других базах данных.