2017-09-16 81 views
0

我有一个表(InquiryTable),首先我从中选择一些记录,当我从数据库中提取这些记录后,我将它们更新到数据库中。但我需要知道如何通过nhibernate同时执行这两个命令(将它们合并为一个)。有特殊情况的更新记录nhibernate

inquiry = Session.Query<InquiryTable>().Where((c => c.ID == ID)).ToList();  
inquiry.FirstOrDefault().Time= sendTime; 
Session.Update(inquiry); 

我想在一个命令中合并Session.Query和Session.Update。这意味着我需要在同一个查询中进行更新。

回答

0

将适合于这一概念是什么NHiberante DML

13.3. DML-style operations

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

此功能集建立在ICriteriaQueryOver顶部,但它使用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(); 

参见: