Nhibernate更新整数字段=字段+ 1

时间:2014-01-17 09:18:56

标签: nhibernate

我有一个在nhibernate中映射的简单整数字段 我想做一个更新,nhibernate会把它翻译成+1;

UPDATE table_name SET revision=revision + 1 [WHERE Clause]....

有可能制作这样的东西吗?在更新时强制nhibernate递增字段N?

1 个答案:

答案 0 :(得分:0)

如果您正在谈论“在不加载实体的情况下进行更新”,答案是肯定的,我们确实有DML:13.3. DML-style operations。小提取物:

  

...自动和透明的对象/关系映射关注对象状态的管理。这意味着对象状态在内存中可用,因此直接在数据库中操作(使用SQL数据操作语言(DML)语句:INSERT,UPDATE,DELETE)数据不会影响内存状态。但是,NHibernate提供了通过Hibernate查询语言(HQL)执行批量SQL样式DML语句执行的方法......

这是一种方法,如何使用我们拥有的映射,创建描述更新的HQL,直接在数据库引擎上执行此操作,无需任何数据加载。

转换示例:

ISession session = sessionFactory.OpenSession();
ITransaction tx = session.BeginTransaction();


string hqlUpdate = "update TheMappedEntity e set e.Revision=(e.Revision + 1) where...";
int updatedEntities = s.CreateQuery( hqlUpdate )
        .SetString( ... // set params
        .ExecuteUpdate();

tx.Commit();
session.Close();

最大的优点是我们正在使用实体(映射的)而不是原始SQL