我有一个在nhibernate中映射的简单整数字段 我想做一个更新,nhibernate会把它翻译成+1;
UPDATE table_name SET revision=revision + 1 [WHERE Clause]....
有可能制作这样的东西吗?在更新时强制nhibernate递增字段N?
答案 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