обновить column1 = column1 + 10 в NHibernate - PullRequest
1 голос
/ 16 ноября 2011

Есть ли способ в 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

1 Ответ

1 голос
/ 16 ноября 2011

с использованием HQL

s.CreateQuery("UPDATE person SET Property1=Property1 + :p1")
    .SetParameter("p1", myValue)
    .ExecuteUpdate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...