我有一个表(InquiryTable),首先我从中选择一些记录,从数据库中提取这些记录后,我将它们更新到数据库中。但我需要知道如何通过nhibernate同时完成这两个命令(将它们合并为一个)。
inquiry = Session.Query<InquiryTable>().Where((c => c.ID == ID)).ToList();
inquiry.FirstOrDefault().Time= sendTime;
Session.Update(inquiry);
我想在一个命令中合并Session.Query和Session.Update。这意味着我需要更新同一查询中的位置。
答案 0 :(得分:0)
适合这个概念的是NHiberante DML
13.3. DML-style operations
如前所述,自动和透明的对象/关系 映射关注对象状态的管理。这意味着 对象状态在内存中可用,因此进行操作 (使用SQL数据操作语言(DML)语句:INSERT, UPDATE,DELETE)数据直接在数据库中不会受到影响 内存状态。但是,NHibernate提供了批量方法 SQL样式的DML语句执行是通过执行的 Hibernate查询语言(HQL)。
此功能集不构建于ICriteria
或QueryOver
之上,但确实使用了HQL。
doc中的一个示例,一次性对过滤后的数据执行UPDATE:
string hqlUpdate = "update Customer c set c.name = :newName where c.name = :oldName";
// or string hqlUpdate = "update Customer set name = :newName where name = :oldName";
int updatedEntities = s.CreateQuery( hqlUpdate )
.SetString( "newName", newName )
.SetString( "oldName", oldName )
.ExecuteUpdate();
另见: