0

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>
4

1 に答える 1

1

エンティティを更新すると、変更が自動的に追跡されます。そのため、トランザクションがコミットされると、変更されたすべてのエンティティが永続化されます。電話する必要はありません:

Session.Save(entity);

この質問を参照してください。

エンティティごとの変更追跡を無効にするには、エンティティをセッションから削除する必要があります。

Session.Evict(entity);

変更を永続化するには、次のように呼び出します。

Session.Update(entity);
于 2009-09-08T15:20:42.687 に答える