2010-09-16 64 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,但是在它的对象图中它引用了那里。

我想到了这个原因,会议决定保留它们在发票预定版本中的值。

所以我做了什么是我把这个刷新几乎放在方法的顶部,它开始像过去一样工作,并且实际上从数据库中提取值。

对我来说似乎很奇怪,虽然它不会改变我刷新时的属性值,但这是它为我做的。