2010-09-16 69 views
0

我們正在運行的webservices被調用來填充和更新我們的數據庫,在一個函數中,一個EntityReactionType get的webservice的調用者用ID填充。NHibernate拒絕刷新對象

EntityReactionType具有由實體和(驚訝)ReactionType組成的複合多對一密鑰。

這些ID被填充正確的值,然後我想從數據庫中刷新對象以檢查在數據庫中設置的一些值,但用戶不知道。在這種情況下:IsStart和IsClosing。

我做這一切用下面的代碼:(這是一個簡化剪斷但這個想法應該很清楚)

我可以看到刷新執行SQL,這是正確的,並表明這有ISSTART = False,並且IsClosing = True。

然而當我查看Refresh IsStart = null和IsClosing = False後的對象值時,

//entityReactionTypeRepository.Merge(reaction.EntityReactionType); 
entityReactionTypeRepository.Refresh(reaction.EntityReactionType); 

if (reaction.IsResolved == true || reaction.EntityReactionType.CloseDispute == true) 
{ 
    reaction.IsResolved = true; 
    reaction.Invoice.IsDisputed = false; 
} 

我自認爲註釋掉歸併線是我發現同時搜索谷歌,但什麼也沒有改變(的想法是,你不能刷新東西是不transistant,但什麼都沒有改變,SQL獲取的執行eitherway但值不會更新)

我接近在這個時候做一個工作,只是創建detachedcriteria並執行,但我知道這應該是這樣的可能。

問候,

Folkert

+0

您可以發佈完整刷新方法的代碼嗎? – AlexCuse 2010-09-16 13:10:07

+0

這只是調用當前的Session.Refresh(object) – 2010-09-16 13:19:43

+0

這些值是如何在數據庫中設置的?觸發? – AlexCuse 2010-09-16 16:00:27

回答

0

那麼今天,我重新審視這個問題,我想我明白爲什麼這樣做,在我看來,當我打電話刷新它仍保持着原始值,因爲在我的代碼之前,我刷新我也做了一個發票對象抗議。發票本身沒有EntityReactionTypes,但是在它的對象圖中它引用了那裏。

我想到了這個原因,會議決定保留它們在發票預定版本中的值。

所以我做了什麼是我把這個刷新幾乎放在方法的頂部,它開始像過去一樣工作,並且實際上從數據庫中提取值。

對我來說似乎很奇怪,雖然它不會改變我刷新時的屬性值,但這是它爲我做的。