我有一個驗證引擎,它遍歷對象的所有屬性並檢查它們是否有效。Nhibernate,確定是否已經檢索到lazyloaded集合
如果我得到一個實體並更改一個簡單的屬性並在引擎中運行它,它會保留所有延遲的集合。
換句話說,它獲取集合並遍歷該集合中的實體。如果這個集合已經被檢索出來了,那麼這個集合是沒有問題的,但是如果它沒有被檢索到,那麼沒有任何理由會失效,所以沒有理由去獲取它。
總之,我可以檢查一個集合,看看它是否已被檢索。如果我能做到這一點,那麼我可以跳過或迭代相應的集合。
我有一個驗證引擎,它遍歷對象的所有屬性並檢查它們是否有效。Nhibernate,確定是否已經檢索到lazyloaded集合
如果我得到一個實體並更改一個簡單的屬性並在引擎中運行它,它會保留所有延遲的集合。
換句話說,它獲取集合並遍歷該集合中的實體。如果這個集合已經被檢索出來了,那麼這個集合是沒有問題的,但是如果它沒有被檢索到,那麼沒有任何理由會失效,所以沒有理由去獲取它。
總之,我可以檢查一個集合,看看它是否已被檢索。如果我能做到這一點,那麼我可以跳過或迭代相應的集合。
使用NHibernateUtil
:
var isInitialized = NHibernateUtil.IsInitialized(entity.Collection);
是的,這是我結束了。問題是我正在使用反射和IsInitialized屬性而不是對象或類似的東西。我不得不在prop上取得值,然後檢查它。當在支柱上對IsInitalized進行編碼時,它返回true,對於正確返回false的值。 – Raif
的'主動Record'圖案,C#'ref'或'公共static'參考可以幫助你確定這個對象已經被評估。另一個選擇是實現'IClonable',並在內存中保留每個評估實體的空克隆,以便您知道之前對其進行了評估,或者只保留實體哈希代碼的列表。順便說一句,如果Nhibernate已經在內存中加載了延遲加載的集合,它將不會再次加載它們,除非你退出而不是退出ISession。 – George