自己参照を持つエンティティがあります (エンティティ デザイナーによって生成されます):
public MyEntity: EntityObject
{
// only relevant stuff here
public int Id { get...; set...; }
public MyEntity Parent { get...; set...; }
public EntityCollection<MyEntity> Children { get...; set...; }
...
}
テーブルからノードのサブツリー (直接の子だけでなくMyEntity
) を返し、オブジェクトのリストを返すストアド プロシージャを作成しました。ストアド プロシージャを使用して、任意の深いツリーの遅延読み込みを回避しています。このようにして、関連するサブツリー ノードを 1 回の呼び出しで DB から取得します。
List<MyEntity> nodes = context.GetSubtree(rootId).ToList();
大丈夫だ。しかし、 をチェックするnodes[0].Children
と、Count
0 に等しくなります。しかし、デバッグして をチェックするcontext.MyEntities.Results view
と、Children 列挙が入力されます。私の結果を確認すると、私のnode[0]
.
Parent
エンティティ コンテキストにインメモリ マジックを実行させ、プロパティとプロパティに正しい参照を配置するようにプログラムで強制するにはどうすればよいChildren
ですか?
更新 1
電話してみた
context.Refresh(ClientWins, nodes);
GetSubtree()
リレーションを適切に設定する私の呼び出しの後、 DBから同じノードを再度フェッチします。それはまだ単なる回避策です。しかし、 でセット全体を取得するよりはましcontext.MyEntities().ToList()
です。
更新 2
EF Extensions プロジェクトを使用して、これを確実に解決しました。以下の私の答えを確認してください。