2009-09-08 9 views
0

Je rencontre un comportement étrange avec NHibernate. Je récupère une liste d'apprenants à partir d'un dépôt, en les mettant à jour si nécessaire, ce qui est étrange quand je sauvegarde le premier, les modifications apportées à tous les apprenants sont consignées dans la base de données.Comportement d'enregistrement impair avec les référentiels NHibernate et Rhino

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

Des idées pourquoi? Je n'ai pas activé la mise en cache. Je sais que c'est quelque chose à voir avec la transaction car les changements sont conservés même si l'appel à la méthode de sauvegarde est commenté.

Ceci est mon application:

<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> 

Répondre

1

Lorsque la mise à jour des entités, des changements sont détectés automatiquement. Ainsi, lorsque la transaction est validée, toutes les entités modifiées sont conservées. Pas besoin d'appeler:

Session.Save(entity); 

Voir cette Question.

Pour désactiver le suivi des modifications par entité que vous devez expulser l'entité de la session:

Session.Evict(entity); 

Pour conserver les modifications, vous appelleriez alors:

Session.Update(entity); 
+0

Intéressant. Alors, comment puis-je réellement persister juste une de mes entités sans les persister toutes? – Dan

+0

Je souhaite qu'il y avait un moyen de désactiver le suivi des modifications globalement. Ayende avait une explication valable pourquoi, mais je ne peux pas le trouver ATM. – mxmissile

Questions connexes