0
我有一个简单的整数字段在nhibernate映射。
我想做一个更新,nhibernate会将其翻译为+1;Nhibernate更新整数字段=字段+ 1
UPDATE table_name SET revision=revision + 1 [WHERE Clause]....
是否有可能做出这样的事情?更新时强制nhibernate递增字段N?
我有一个简单的整数字段在nhibernate映射。
我想做一个更新,nhibernate会将其翻译为+1;Nhibernate更新整数字段=字段+ 1
UPDATE table_name SET revision=revision + 1 [WHERE Clause]....
是否有可能做出这样的事情?更新时强制nhibernate递增字段N?
如果您正在谈论“在不加载实体的情况下进行更新”,答案是肯定的,我们确实有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
工作