使用NHibernate更新Top n

使用NHibernate更新Top n,nhibernate,Nhibernate,如何使NHibernate生成此t-sql请求 更新前(n)个任务 设置修改 何处条件 我不想执行事务+批处理更新。请检查以下内容: 引用的代码片段: ISession session = sessionFactory.OpenSession(); ITransaction tx = session.BeginTransaction(); string hqlVersionedUpdate = "update versioned Customer set name = :newName w

如何使NHibernate生成此t-sql请求

更新前(n)个任务 设置修改 何处条件

我不想执行事务+批处理更新。

请检查以下内容:

引用的代码片段:

ISession session = sessionFactory.OpenSession();
ITransaction tx = session.BeginTransaction();
string hqlVersionedUpdate = "update versioned Customer set name = :newName where name = :oldName";
int updatedEntities = s.CreateQuery( hqlUpdate )
        .SetString( "newName", newName )
        .SetString( "oldName", oldName )
        .ExecuteUpdate();
tx.Commit();
session.Close();
因此,通过这种方式,我们可以使用HQL(使用我们的域模型)定义更新,并在DB端直接执行udpate


注意:要了解更多详细信息,请查看这篇博文:by Ayende

我在这里没有看到“Top”命令,我只需要更新5个元素,我知道我可以执行ExecuteSqlQuery,但是我必须检查数据提供程序,因为Top命令是特定于t-sql的,在MySql中我们使用Limit,我希望Nhibernate为我生成特定的查询,这样它就可以在所有的数据提供者上工作。我想说,我们可以这样做!;)选中文档中的这一行:“…子查询可用于where子句;子查询本身可能包含联接…”使用一些前5个查询(子查询)返回要更新的正确ID集。。。然后使用DML!;)强大的NHibernate-检查非常感谢!为了安全起见,我将把它放在一个事务中,一个HQL查询可能会(也可能不会)生成许多sql查询(例如,如果我们查询一个未映射的基类)。这是一个神奇的工具;)