0

アプリケーションコンポーネント:NHibernate 3.3 FluentNHibernate 1.3現在、自動マッピングのみを使用しています(おそらくそれが問題です)。

私はNHibernateを初めて使用するので、これは簡単な質問かもしれません。

これが基本的な構造です(実際のクラスではありません)。

class Family
{
   public virtual Guid ID { get; set; }
   public virtual IList<Person> Members { get; set; }
}
class Person
{
   public virtual Guid ID { get; set; }
   public virtual Family Family { get; set; }
   public virtual string Name { get; set; }
}

IDをパラメータとして使用する、その人の「編集」ビューがあります。次に、アクションはIDでPersonオブジェクトをロードし、ビューをレンダリングします。

問題は、何かを変更してポストバックすると、PersonオブジェクトのFamilyメンバーがnullになるため、保存すると、Personには家族がなくなります:(

「FamilyID」プロパティを追加し、それをビューの非表示プロパティとして使用しようとしましたが、NHibernateがそれを永続化することに問題があります(これが機能するはずの方法である場合は、エラーを投稿できます)。

ポストバックされたときにPersonオブジェクトをロードし、情報の一部をコピーするだけで済みますが、それは私には間違っているようです...

どんな助けでも大歓迎です。

4

1 に答える 1

2

ポストバックされたときにPersonオブジェクトをロードし、情報の一部をコピーするだけで済みますが、それは私には間違っているようです...

ビュー内にファミリプロパティに対応する入力フィールドがない場合、それらの値がコントローラに返されることはありません。したがって、Personオブジェクトを更新する前に、データベースからFamilyID(非表示フィールドで送信したもの)を使用してそれらを取得する必要があります。それが正しい流れです。


アップデート:

これは、このシナリオを処理するための最良の方法は、ビューモデル(DUH)を使用することであると言われています。したがって、ビュー内でユーザーが編集することになっているプロパティのみを含むビューモデルを設計します。次に、ビューをビューモデルに強く型付けし、HttpPostコントローラーアクションがビューモデルを引数として取ります。このアクション内で、データベースから更新する必要のあるPersonドメイン全体をロードし、ビューモデルから変更されたプロパティを設定し(などのツールで簡単にAutoMapper)、ドメインモデルをデータベースに永続的に戻します。ビューの一部であったプロパティのみが、このPersonドメインモデルから変更されます。

于 2013-02-05T21:45:47.610 に答える