0

助けが必要です: 私は Nhibernate の初心者です。監視可能なコレクションにバインドされたデータグリッドをロードする wpf アプリケーションを作成しました。このコレクションには、リポジトリ パターンと Nhibernate クエリ データベースが読み込まれます。このコレクションを UI (編集、追加、削除) で変更したい。

保存ボタンをクリックすると、変更を db テーブルに永続化したいと考えています。nhibernate のドキュメントを読んだところ、キャッシュには 2 つのレベルがあることがわかりました。私の考えは、第 1 レベルのキャッシュでオブジェクトを変更することであり、変更が確定したら永続化したいと考えています。これを行うためのベストプラクティスはありますか?

オブジェクトを削除または更新するようにマークし、 [変更を保存] をクリックした後にオブジェクトを削除または更新する方法は?

4

1 に答える 1

1

これは興味深い読み物になるはずです: Building a Desktop To-Do Application with NHibernate

基本的に、ISessionオブジェクトのメソッドを使用し、トランザクション内で操作を行う必要があります。ISession.BeginTransaction()

エンティティを取得する方法によって異なります。それらが従業員などのルート エンティティである場合、グリッドからエンティティを削除するときは、これらの削除されたエンティティを追跡し、それらすべてに対して delete を呼び出す必要があります。また、追加されたエンティティを追跡する必要があります。

次に、基本的に残っているのは、更新されたエンティティです。NH は状態を追跡し、エンティティが変更されたかどうかを認識します。

我々は持っていますISession.Save/Update/Delete.

変更されたエンティティごとにこれを行ったら、トランザクションで Commit を呼び出します。これにより、変更がデータベースに保存されます。

エンティティがルートではなく、たとえば従業員の住所である場合、マッピングが正しければ、従業員に対して save を呼び出すだけで十分です。

于 2013-01-31T16:49:34.673 に答える