NHibernate - 是否可以在UPDATE / DELETE上应用过滤器?

时间:2014-09-18 18:42:21

标签: nhibernate filter sql-update sql-delete

我知道我们可以轻松地将过滤器应用于使用NHibernate的其他where条件进行查询,但是在执行更新或删除时是否可以应用过滤器?

如果是,我该如何实现?

1 个答案:

答案 0 :(得分:2)

是的,可以使用HQL(Hibernate查询语言)

以下是批量更新的示例

IQuery updateQuery = this.Session.CreateQuery("update TransferItem set Status = :newStatus where Status = :oldStatus")
                        .SetParameter("oldStatus", DownloadStatus.Active)
                       .SetParameter("newStatus", DownloadStatus.Queued);
updateQuery.ExecuteUpdate();

NHibernate应用已配置的映射来创建和运行以下SQL:

 update cms_TransferItem set Status=@p0 where Status=@p1

以下是批量删除的示例

IQuery deleteQuery = this.Session.CreateQuery("delete TransferItem ti WHERE ti.Status = :statusToGo")
                           .SetParameter("statusToGo", DownloadStatus.Completed);

deleteQuery.ExecuteUpdate();

这样执行SQL:

 delete from cms_TransferItem where Status=@p0

您可能会问,如果您必须使用查询语言,为什么不编写原始SQL?使用HQL时,您正在使用其余.NET代码正在使用的概念业务对象。 ORM工具的好处是,对于大部分代码,数据库表和对象到表的映射都被抽象掉了。使用HQL,您将继续与对象层交互,而不是直接与数据库表交互。