次のようなオブジェクト構造があります。
public class Entity
{
IList<Relationship> Relationships{get;set;}
}
public class Relationship
{
public Relationship(Entity parent, IList<Entity> children)
{
//set properties
}
Entity Parent{get;private set;}
IList<Entity> Children{get;private set;}
}
Relationship には、親インスタンスと子インスタンスに関するすべての情報が含まれています。親と関係を構成するすべての子インスタンスで同じ Relationship インスタンスを共有したいと考えています。
データベースからエンティティをロードするときは、一番上のエンティティから始めて、関係をロードします。構築中の関係をキャッシュして、同じインスタンスを子に再利用できると考えました。しかし、これはすべての子エンティティをロードする必要がある関係を作成するためには機能しません。そのため、各子エンティティは、作成される前に現在子を取得しようとしているのと同じ関係を再作成しようとするため、すべてを作成することになりますリレーションシップをキャッシュに追加する前に、ツリー内で自分の下にあるリレーションシップ インスタンスを確認します。
子供を関係の設定可能なプロパティにせずにこれを回避できる方法はありますか?