私はNHibernateを使用するプロジェクトに取り組んでいます。 私はセッションを開いたままにしません。オブジェクトを取得または保存する必要があるときは、セッションを開き、必要なものを実行してからセッションを閉じます。だから私はいつもセッションから切り離されたオブジェクトを使って作業しています。セッションが切り離されたときにNHibernateで変更されたプロパティのみを更新する最良の方法は何ですか?
たとえば、データベースからオブジェクトを取得する必要がある場合、セッションを開き、session.Get()を呼び出してセッションを閉じます。次に、私はデタッチされたオブジェクトのいくつかのプロパティを更新します。変更をデータベースに保存する必要があるときは、セッションを開くメソッドを呼び出し、session.Update(myObject)を呼び出してセッションを閉じます。
しかし、そうすると、NHibernateは変更されていなくても、マップしたすべてのフィールドを更新するsqlを生成します。私の提案は、オブジェクトがセッションから切り離されたときで、NHibernateは変更が行われたことを追跡できませんでした。 セッションから切り離されたオブジェクトに対して変更されたプロパティのみを更新する場合は、どのような方法を使用しますか?切り離されたオブジェクトの変更をどのように追跡しますか?
おかげ
データベースにトリガーがありません。まあ、私はプロパティを更新するために使用されたためにこれをやりたいのですが、変更されました。更新オブジェクトが盲目的に速くなり、Mergeに追加のリソースが必要になることを意味しますか? –
ところで、なぜ私はselect-before-update = "true"を使わなければならないのですか? –
Mergeに追加のクエリが必要です。これは追加のdb往復であり、オーバーヘッドがあります。私はselect-before-updateがMergeを避けることだと思います。 Mergeはビジネスロジックに影響を与えます。 –