NHibernate和Rhino存储库的奇怪保存行为

时间:2009-09-08 10:12:23

标签: nhibernate rhino unit-of-work

我在使用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>

1 个答案:

答案 0 :(得分:1)

更新实体时,会自动跟踪更改。因此,当提交事务时,所有已更改的实体都会保留。无需致电:

Session.Save(entity);

请参阅此Question

要禁用每个实体的更改跟踪,您必须从会话中逐出实体:

Session.Evict(entity);

要保留任何更改,您可以致电:

Session.Update(entity);