在NHibernate中更新column1 = column1 + 10

时间:2011-11-16 08:00:37

标签: c# nhibernate

在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 个答案:

答案 0 :(得分:1)

使用HQL

s.CreateQuery("UPDATE person SET Property1=Property1 + :p1")
    .SetParameter("p1", myValue)
    .ExecuteUpdate();