Странное поведение при сохранении с репозиториями NHibernate и Rhino

У меня странное поведение с 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>

person Dan    schedule 08.09.2009    source источник


Ответы (1)


При обновлении сущностей изменения отслеживаются автоматически. Поэтому, когда транзакция фиксируется, все измененные сущности сохраняются. Звонить не нужно:

Session.Save(entity);

См. Этот вопрос.

Чтобы отключить отслеживание изменений для каждой сущности, вы должны исключить эту сущность из сеанса:

Session.Evict(entity);

Чтобы сохранить какие-либо изменения, вы должны затем позвонить:

Session.Update(entity);
person mxmissile    schedule 08.09.2009
comment
Интересный. Итак, как мне на самом деле сохранить только одну из моих сущностей, не сохраняя их все? - person Dan; 09.09.2009
comment
Хотелось бы, чтобы был способ отключить отслеживание изменений во всем мире. У Айенде было веское объяснение почему, но я не могу найти там банкомат. - person mxmissile; 09.09.2009