0

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

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

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

4

1 回答 1

0

适合这个概念的是 NHiberante DML

13.3. DML 风格的操作

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

此功能集不是ICriteria基于or构建的QueryOver,但它确实使用了 HQL。

文档中的一个示例,一次性对过滤后的数据进行更新:

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();

也可以看看:

于 2017-09-16T17:16:57.620 回答