Есть ли способ в NHibernate заставить его генерировать SQL, который добавляет значение к столбцу, как в update column1 = column1 + 10 ?
Это для одновременных обновлений, когда два соединенияможет быть обновление значения и выбор с последующим обновлением не будет работать правильно.
Другой способ, по-видимому, имеет следующие строки в файле отображения:
optimistic-lock="dirty"
dynamic-update="true"
Тогда код будет выглядетьчто-то вроде этого:
byte tryAgain = 3;
while( --tryAgain >= 0 )
{
try {
using (ISession s = OpenSession())
using (ITransaction tx = s.BeginTransaction())
{
var person = s.Query<X>().Where(o => o.Y == z ).FirstOrDefault();
if( person != null ) {
person.Column1 = person.Column1 + myValue;
s.Update( person );
}
break;
}
} catch ( StaleObjectException ) {
if( tryAgain == 0 ) {
throw;
}
}
}
Объем кода для обработки этой ситуации не так уж и плох, но update column1 = column1 + x - такая хорошая и базовая функция SQL, чтобыло бы здорово, если бы был способ, например, выразить тот факт, что поле отображаемого класса в отображении представляет собой дельту, а не абсолютное значение.
Спасибо заранее,
Tymek