我無法在IQuery接口或ISession中找到任何query.executeUpdate()方法,我可以通過hql更新記錄。如何在nHibernate中運行更新HQL查詢?
這裏是HQL:
string hql = "update QAD qa set qa.NFS=:NFS where qa.ID = 1145";
IQuery q = session.CreateQuery(hql).SetString("NFS", "10");
我無法在IQuery接口或ISession中找到任何query.executeUpdate()方法,我可以通過hql更新記錄。如何在nHibernate中運行更新HQL查詢?
這裏是HQL:
string hql = "update QAD qa set qa.NFS=:NFS where qa.ID = 1145";
IQuery q = session.CreateQuery(hql).SetString("NFS", "10");
在NHibernate中,我們正在做的一點點不同: 你從數據庫中獲取的結構,改變的值,然後提交更改。 我不認爲這是可能更直接地做到這一點...
//Pseudocode
T t = session.Get<T>(id);
t.NFS = 10;
session.SaveOrUpdate(t);
session.Transaction.Commit();
由於沒有更多的任何答案解決實際問題,這裏是應該怎麼做,假設你的NHibernate的版本不太舊以至於不支持:
string hql = "update QAD qa set qa.NFS=:NFS where qa.ID = 1145";
IQuery q = session.CreateQuery(hql).SetString("NFS", "10");
q.ExecuteUpdate();
個人而言,我寧願將id設置爲參數。如果您願意,您可以檢查ExecuteUpdate
返回值。它會告訴有多少實體進行了更新。
有關HQL DML語句的參考文檔是here。
請參閱Mauricio對接受答案的評論。這現在已經實施。 – MPritchard 2012-07-24 13:05:11
我的(upvoted)答案因爲某些原因被刪除了..但它表示你需要NHibernate的v2.1來使用這個功能。可能有更新的版本沒有。 @undo爲什麼刪除我的答案?看起來它一定至少幫助了2個人。 – 2016-09-01 18:37:21