在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
答案 0 :(得分:1)
使用HQL
s.CreateQuery("UPDATE person SET Property1=Property1 + :p1")
.SetParameter("p1", myValue)
.ExecuteUpdate();