更新具有特殊条件的记录nhibernate

时间:2017-09-16 12:55:24

标签: sql .net nhibernate where updatecommand

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

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

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

1 个答案:

答案 0 :(得分:0)

适合这个概念的是NHiberante DML

  

13.3. DML-style operations

     

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

此功能集构建于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();

另见: