Похоже, что NH получает MAX (ID) только один раз, сначала вставляет, а затем сохраняет это значение внутри, это вызывает у меня некоторые проблемы, когда другие процессы вставляют данные.Тогда у меня нет фактического идентификатора, и исключение дубликат ключа выдается.
Давайте представим, что у нас есть таблица Cats
CREATE TABLE Cats(ID int, Name varchar(25))
Затем мы выполним соответствующее сопоставление с помощью FluentNhibernate
public class CatMap : ClassMap<Cat>
{
public CatMap()
{
Id(m=>m.ID).GeneratedBy.Increment();
Map(m=>.Name);
}
}
Все, чего я хочу добиться, это вставить свой Cat
записей с идентификаторами, сгенерированными NHibernate с использованием SELECT MAX(ID) FROM Cats
перед любой вставкой.Выполнение Session.Flush после любого коммита.Я провел некоторое исследование с использованием профилировщика SQL Server, и эта инструкция SQL выполняется только один раз (при первой вставке) - другие вставки не заставляют возвращать фактический MAX (ID).Я знаю, что другие алгоритмы, такие как HiLo, лучше, но я не могу заменить его.