2014-09-18 53 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

相關問題