私はORMとしてNHibernateを使用しています。私はITトランザクションに包まれたものがある状況があります。 NHibernateのSaveUpdateイベントを聞いて、そのSaveUpdateハンドラでエンティティの検証を行っています。NHibernate - 検証とトランザクションの問題
私のエンティティの1つでは、特定のプロパティの値が変更されていないことを検証したいと思います。だから、私は、データベースから既存のオブジェクトの値を読み込み、新しい値と比較すると考えました。問題は、エンティティオブジェクトを保存するためにITransaction.Commit()を呼び出し、トランザクションがロックされているため、トランザクションが検証が行われた時点で実際にコミットされていないため、データベースから既存のオブジェクトを読み込むことができないということです。
ここで私はいくつか異なる質問があると思います: - SaveUpdateイベントは検証を行う正しい場所ですか? - これを実行する別の方法がありますか(データベースから既存の値を取得して比較する)必要な検証を行うことができますか?
他の誰かが似たような状況に遭ったと確信しています......うまくいけば!
私は同意しません。私は最終的に保存前にエンティティを検証したいので、永続性と関係があると思います。プロパティの検証は単純なケースでも有効ですが、検証ルールには単一のエンティティだけでなく、銀行口座に1人の主なアカウント所有者しか持てない場合もあります。 –
あなたのエンティティ内のものを変更するメソッドを使用しない理由ではありません。集約ルートは、子エンティティの検証を担当する必要があります。 – Paco
しかし、集約ルートの子エンティティを保存するとどうなりますか? –