例のコードでは、エンティティでUpdate
を呼び出します。これは、分離されたエンティティを更新する場合、現在のNHibernateセッションによって追跡されないエンティティです。
デタッチされたエンティティを更新するときに、NHibernateに、指定されたエンティティを取得し、それを完全な新しい状態とみなして、データベースで更新するように指示します。したがって、設定していないすべてのプロパティはデフォルト値を持ち、NHibernateはそれらのデフォルト値でデータベースを更新する必要があると考えます。
1つのプロパティだけを変更する場合は、最初にNHibernateでロードし、プロパティを変更してから、セッションをFlush
にする必要があります。
var r = session.Load<Rezervace>(id);
r.Stav = 1;
session.Flush();
エンティティが現在のセッションからロードされたときに更新するエンティティをNHibernateに伝える必要はありません。
デフォルトでは、NHibernateは以前の値ですべてのプロパティを更新し、新しい値で変更したプロパティも更新します。 Rabban answerで述べたように、この振舞いを変更するためにクラスマッピングでdynamic-update
を有効にし、NHibernateに変更されたプロパティのみを更新させる必要があります。
注:
私は今、私は答えていないはずですが、検討してください:
- フラグとして不明確または(今は不明として行う)重複閉じるための質問、のいずれかを。
- 既存の質問の中で現在の可能な回答を指す。 (this commentで完了。)
This answerこれらの他の質問のうちの1つは、私たちが離脱した場合には、私の方法よりも優れています。
あなたが1つの仲間と言うときはどういう意味ですか? –
あなたのマッピングで 'Dynamic-Update'をtrueに設定することができます。しかし、あなたはこの振る舞いをしたいすべてのクラスのためにそれを設定しなければなりません。 – Rabban
@Rabban ok、どうやって更新しますか?rezervaceDao.Update(r.Stav); did not work – pajasv