2014-09-18 54 views

回答

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 [email protected] where [email protected] 

下面是批量删除的示例

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

deleteQuery.ExecuteUpdate(); 

,其执行这样的SQL:

delete from cms_TransferItem where [email protected] 

你可能会问,如果你有一个查询语言的工作,为什么不只是写原始SQL?当您使用HQL时,您正在使用其余.NET代码正在处理的概念性业务对象。 ORM工具的好处在于,对于大部分代码来说,数据库表和对象映射都是抽象出来的。使用HQL,您将继续与对象层交互,而不是直接与数据库表交互。

+0

有趣的,但遗憾的是,在我的情况下,这是行不通的,因为我们正在使用通用的存储库模式。这个想法是在数据库更新或删除时应用一个自定义函数调用。有一种方法可以通过简单的'session.SaveOrUpdate'或者'session.Delete'调用吗? (对于每次删除或更新,过滤器会生成如下内容:'Where IsOperationAllowedFromUser(:userId,:itemId)') – 2014-09-19 13:08:30

+0

@ Sam9291 IsOperationAllowedFromUser是SQL函数还是.NET函数? – 2014-09-19 21:12:08

+0

这将是一个SQL函数 – 2014-09-21 11:52:29

相关问题