代码之家  ›  专栏  ›  技术社区  ›  Dan TheCodeJunkie

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

  •  0
  • Dan TheCodeJunkie  · 技术社区  · 15 年前

    我正在经历一些奇怪的行为与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 回复  |  直到 15 年前
        1
  •  1
  •   Community CDub    7 年前

    更新实体时,将自动跟踪更改。因此,当提交事务时,所有更改的实体都将被持久化。无需致电:

    Session.Save(entity);
    

    看到这个 Question .

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

    Session.Evict(entity);
    

    要保留任何更改,您将调用:

    Session.Update(entity);