0

メニューをロードするために 1 つのデータベース呼び出しを実行しようとしていますが、調査の結果、自己参照テーブルに使用できる熱心なロードがないことに気付きました。現在、次のようになっています。

public ActionResult PopulateHeaderMenu()
{
 using (var context = ww.WebObjs.WebDataContext.Get())
 {
    var menus = from menu in context.MenuCaches
    where menu.URL == "MENU" && menu.ParentID == -1
    select new MenuModel
    {
        ID = menu.ID,
        Children = from x in menu.Children
                select new MenuModel
                {
                   ID = x.ID,
                   Children = from y in x.Children
                            select new MenuModel
                            {
                                ID = y.ID,
                                Children = from p in y.Children
                                    select new MenuModel
                                    {
                                      ID = p.ID,
                                      Children = from r in p.Children
                                      select new MenuModel 
                                      {
                                        ID =r.ID,
                                        Children = from s in r.Children     
                                        select new MenuModel
                                        {
                                          ID =s.ID,
                                          Children = from t in s.Children
                                             select new MenuModel
                                             {
                                               ID = t.ID,
                                             }
                                        }
                               }
                      }
                  }
            }
         };
         var model = menus.First();
         return PartialView("_NaviPartial", model);
        }

    }

これはかなりうまく機能しますが、113 の個別のクエリが生成されます。DataLoadWith() を実行しようとしましたが、自己参照プロパティに対して実行できません。私がここでやろうとしていることを行う別の方法はありますか? 私は間違ったアプローチを取っていますか?

ありがとうございました

4

1 に答える 1

1

私は数年前にこのようなことをしました(そしてもうコードにアクセスできません)。重要なのは、フラットテーブルを一度ロードしてから、親エンティティのローカル(マップされていない)プロパティを設定するアイテムをループすることでした。これにより、これらのマップされていないプロパティを介してツリー内を自由にナビゲートし、グラフを1回だけフェッチできます。残念ながら、自己参照エンティティにLoadWithオプションを使用することはできません(http://www.thinqlinq.com/Default/Managing-self-referencing-tables-with-LINQ-to-SQL.aspxを参照)。

于 2012-08-28T19:59:02.220 に答える