1

エンティティ フレームワーク (コード ファースト) C#

1 対多構造のノードを持つツリー構造があります。

Node
|
\--- Children

すべての子 (ICollection) を列挙する必要があります。現在、これは私がコードを見ている方法です:

using (DBContext context = new DBContext()
{
    parentNode = (from query in context.Tree
                  where query.IsSomeWayToIDTheParentNode
                  select query).ToArray();

}

var tree = SomeRecursiveTreeBuilderMethod(parentNode);

このコードでは、parentNode の第 1 レベルの Children プロパティが列挙されていますが、実際の子ノードの Children プロパティは列挙されていないため、ContextDisposed 例外がスローされます。

.Include(inc => inc.Children) をクエリ全体 (括弧の後) と context.Tree の両方に追加しようとしましたが、うまくいきませんでした。列挙を強制する using ステートメント内で再帰的な 'ChildEnumerator(parentNode)' メソッドを簡単に呼び出すことができますが、オブジェクトと子オブジェクト (n-deep) がすべて完全であることを確認するためのより良い方法が必要だと感じています。コンテキストスコープをエスケープする時点で入力されます。

4

2 に答える 2

0

これは期待どおりに機能するはずです。

List<Tree> parentNodes = new List<Tree>();

using (DBContext context = new DBContext()
{
    parentNodes = (from query in context.Tree
                   where query.IsSomeWayToIDTheParentNode
                   select query).ToList();
}

var tree = SomeRecursiveTreeBuilderMethod(parentNodes);
于 2013-03-07T07:39:00.920 に答える
0

正しくフォーマットされていれば、インクルードは機能するはずなので、次のようになります。

using (DBContext context = new DBContext()
{
    parentNode = context.
        .Tree
        .Include(inc => inc.Children)
        .Where(query => query.IsSomeWayToIDTheParentNode)
        .ToArray();
}

これがDbExtensions.Includeの公式ドキュメントです

于 2013-03-06T23:39:08.457 に答える