我想刷新實體及其所有子集合。做這個的最好方式是什麼?我說的是NHibernate的:)刷新nhibernate實體的最好方法是什麼
我讀過有關session.Evict,session.Refresh ...
但我還是不知道做這樣:
RefreshEntity<T>(T entity)
{
session.Evict(entity);
session.Refresh(entity);
}
會按照我希望它的工作方式工作
它會工作嗎?如果不是,我還能做什麼?
我想刷新實體及其所有子集合。做這個的最好方式是什麼?我說的是NHibernate的:)刷新nhibernate實體的最好方法是什麼
我讀過有關session.Evict,session.Refresh ...
但我還是不知道做這樣:
RefreshEntity<T>(T entity)
{
session.Evict(entity);
session.Refresh(entity);
}
會按照我希望它的工作方式工作
它會工作嗎?如果不是,我還能做什麼?
Evict刷新後可能無法正常工作。
理論上,Refresh
就應該足夠了。然而,當兒童收藏的元素被刪除時,它已經有了一些已知的問題。
Evict
然後Get
通常會完成任務。
刷新(parentObject)將是一個不錯的選擇,但對我而言,它首先獲取所有的孩子一個接一個請求。沒有批處理,沒有子查詢,沒有加入。很壞!
它幫助.Clear()父對象的子集合;我之前也驅逐了這些兒童物品。
(在父/子SaveOrUpdate多次插入會導致昂貴的聚簇索引重建之前,這些已由HQL更新進行了更改)。
編輯:我再次刪除了HQL更新,因爲查詢(減少索引由一個唯一的大數字)比批處理中數百個單行更新更昂貴。所以我最終得到了一個簡單的SaveOrUpdate(parentObject),不需要刷新。
原因是對ParentID和Index(連續數字)具有唯一約束的子集合,這會在更新已更改的子項目時導致唯一性違規。因此,該指數首先增加1000000(或任意高的數字)所有的孩子,然後在變化後,再次減少。
抱歉這樣說,但這並不工作:(它的工作原理在這種情況下: 1)pEntity.pCollection是空 2)我在數據庫中手動 3)我可以看到更新的集合 項目添加到收藏 但並不在這種情況下工作: 1)pEntity.pColelction具有提神我仍然有pEntity相同的項目後的值 2)我手動更改數據庫 3 pEntity.pCollection項的值) .pCollection ... – Katalonis 2010-11-08 09:56:42
如果** pCollection級聯,單獨刷新應該在該場景中工作。否則,您也必須手動刷新其項目。 – 2010-11-08 10:36:24
單獨刷新似乎對我來說已經足夠用於添加和刪除實體上的懶惰集合。如果有特殊情況我應該知道,鏈接到任何已知的問題或警告將有所幫助。 – 2011-08-04 02:02:58