【问题标题】:Odd save behaviour with NHibernate and Rhino RepositoriesNHibernate 和 Rhino 存储库的奇怪保存行为
【发布时间】:2010-03-09 06:00:43
【问题描述】:

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

【问题讨论】:

    标签: nhibernate rhino unit-of-work


    【解决方案1】:

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

    Session.Save(entity);
    

    看到这个Question

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

    Session.Evict(entity);
    

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

    Session.Update(entity);
    

    【讨论】:

    • 有趣。那么我如何才能真正持久化我的一个实体而不持久化它们呢?
    • 我希望有一种方法可以全局禁用更改跟踪。 Ayende 有一个有效的解释,但我在 ATM 上找不到。
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2021-12-08
    • 2017-06-21
    • 2020-05-17
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2021-06-10
    相关资源
    最近更新 更多