2014-01-17 156 views
0

我有一个简单的整数字段在nhibernate映射。
我想做一个更新,nhibernate会将其翻译为+1;Nhibernate更新整数字段=字段+ 1

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

是否有可能做出这样的事情?更新时强制nhibernate递增字段N?

回答

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

工作