Странное поведение при сохранении в репозиториях NHibernate и Rhino
-
21-09-2019 - |
Вопрос
Я испытываю некоторое странное поведение с NHibernate.Я извлекаю список учащихся из репозитория, обновляя их по мере необходимости, странно то, что когда я сохраняю первый, изменения, внесенные во всех учащихся, передаются в базу данных.
[Transaction]
public void UpdateLearner(Learner learner)
{
//UnitOfWork.CurrentSession.Save(learner);
}
Есть какие-нибудь идеи, почему?У меня не включено кэширование.Я знаю, что это как-то связано с транзакцией, поскольку изменения сохраняются даже при закомментированном вызове метода save .
Это мое отображение:
<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>
Решение
При обновлении объектов изменения отслеживаются автоматически.Таким образом, когда транзакция фиксируется, все измененные объекты сохраняются.Не нужно звонить:
Session.Save(entity);
Видишь это Вопрос.
Чтобы отключить отслеживание изменений для каждого объекта, вы должны удалить объект из сеанса:
Session.Evict(entity);
Чтобы сохранить любые изменения, затем вы должны вызвать:
Session.Update(entity);