2009-09-08 47 views
0

我遇到一些奇怪的行爲與NHibernate。我從存儲庫中檢索學習者列表,根據需要更新它們,奇怪的是當我保存第一個時,對所有學習者所做的更改都被提交到數據庫。奇怪的保存行爲與NHibernate和犀牛存儲庫

 [Transaction] 
     public void UpdateLearner(Learner learner) 
     { 
      //UnitOfWork.CurrentSession.Save(learner); 
     } 

任何想法爲什麼?我沒有啓用緩存。我知道它與事務有關,因爲即使調用保存方法的註釋,更改也會持續存在。

這是我的映射:

<class name="Learner" table="ILR_Learner"> 
    <id name="Id" column="ILRLearnerID"> 
     <generator class="native" /> 
    </id> 
    <property column="LastWarning" name="LastWarning" type="DateTime" /> 
    <property column="Submitted" name="SuccessfulSubmission" type="DateTime" /> 

    <join table="vwLearnerLSCUpload"> 
     <key column="ILRLearnerID" foreign-key="ILRLearnerID"/> 
     <property column="Dog" type="DateTime" name="Dog"/> 
    </join> 

    <join table="Learner"> 
     <key column="Id" foreign-key="ILRLearnerID"/> 
     <property column="Food" name="Food" type="String" length="20" /> 
    </join> 

    </class> 

回答

1

當更新實體,更改會自動跟蹤。所以當事務被提交時,所有更改的實體都會被保留。無需致電:

Session.Save(entity); 

看到這個Question

要禁用改變每個實體的跟蹤,你必須從會話退出的實體:

Session.Evict(entity); 

要堅持任何改變,那麼你就撥打:

Session.Update(entity); 
+0

有趣。那麼,我怎麼才能堅持我的一個實體而不堅持他們呢? – Dan 2009-09-09 08:10:26

+0

我希望有一種方法可以禁用全局更改跟蹤。 Ayende爲什麼有一個有效的解釋,但我找不到ATM。 – mxmissile 2009-09-09 13:33:41