2

私は、Web ソリューションで使用されている、子関係の古典的な親コレクションを持っています。

子を個別に永続化できるようにしたいのですが、冗長になることも避けたいです。子供は次のように定義する必要があると誰もが言っているようです。

public class Child {
   public virtual int Id {get; set;}
   public virtual string Name {get; set;}
   public virtual Parent {get; set;}
}

これで、子が親への参照を持つようにすることができました。

問題は、これらの Child オブジェクトをアプリケーションからプルするときに、コレクション内の各子と共に読み込まれる Parent のコピーが必要ないということです。

シリアル化に JSON.net を使用していることを知っておくと役立つ場合があります。

繰り返しますが、ここでの私の目標は、子を個別に永続化できるようにすることですが、親オブジェクト全体を内部に格納する必要はありません。

4

2 に答える 2

0

1 つのセッションで子をロードすると、NHibernate はデータベース内の一意の親ごとに 1 つのインスタンスしか作成しません。親がロードした子の 1 つである場合でも、再度ロードすることはありません。または新しいオブジェクトを作成します。これは基本的に、NHibernate が維持する「オブジェクト ID」です。セッション内で、NHibernate は行に対してエンティティのインスタンスを 1 つだけ作成します (それ以外の方法で作成できるいくつかの例外がありますが、通常はこれが当てはまります)。

于 2012-06-22T09:48:40.267 に答える
0

最善の方法は、DTO/ビュー モデルを使用することです。マッパーを使用して、エンティティからこの軽量クラスに転送し、軽量クラスを返します。私はしばらくの間、このアプローチに抵抗し、DTO/ビュー モデル クラスを作成することは私の労力を 2 倍にするだけだと主張しましたが、最終的には、それが最も生産的な方法であり、後で後手に回る可能性が最も低くなります。

Parentそうは言っても、 で装飾することはできますがJsonIgnoreAttribute、A) ドメインのプレゼンテーションやビジネス上の懸念を混乱させ、B) 避けられないことを放棄しているだけです。

于 2012-06-22T01:24:24.870 に答える