2012-01-30 49 views
1

我有一個MenuObject類代表一個網站的頂級菜單。Nhibernate - 對象的部分加載

該對象有除其他特性,執行以下操作:

public class MenuObject 
{ 
    public virtual int Id { get; set; } 
    public virtual string Title { get; set; } 
    public virtual List<MenuObject> Children { get; set; } 
} 

的映射已被配置爲加載熱切兒童使用功能NHibernate的Not.LazyLoad()的定義對象。

我現在,我想用這些對象來填充麪包屑控制和sidemenu控制問題 - 對於這些控件,所有我需要的是:

  • 的ID和標題屬性
  • 的兒童收藏(也只包含上述兩個屬性)

我不想加載我的主對象的所有屬性以及每個對象的所有屬性,因爲它只是矯枉過正。

我已經成功地使用NHibernate的LINQ到retrurn主要對象的唯一屬性,但如何修改查詢,以做子對象的一樣嗎? (見???)

return (from mnu in session.Query<MenuObject>() 
     (select new MenuObject() 
{ 
    Id = mnu.Id 
    Title = mnu.Title, 
    Children = ??? 
} 

----------------編輯-------------------- -

我已經得到了這個工作,但我錯過了一個where子句 - 這是設置'兒童'的所有MenuObject實例列表無論關係 - 顯然我只希望它添加合法的子對象每個父母對象 - 任何人都可以協助?謝謝

from menuobject in session 
    .Query<MenuObject>() 
    where menuobject.Level == level 
    select new MenuObject() 
    { 
     Title = menuobject.Title, 
     Url = menuobject.Url, 
     Children = session.CreateCriteria<MenuObject>() 
          .SetProjection(Projections.ProjectionList() 
          .Add(Projections.Property("Title"), "Title") 
          .Add(Projections.Property("Url"), "Url")) 
          .SetResultTransformer(Transformers.AliasToBean(typeof (MenuObject))) 
          .List<MenuObject>() 
    } 
    .ToList(); 

回答

1

對不起,我錯過了多個孩子的一部分。此外,我贊成的ViewModels或匿名類型,而不是局部加載Domainobjects可能會引起混淆的道路。

var results = (from mnu in session.Query<MenuObject>() 
       from ch in mnu.Children 
       select new 
       { 
        mnu.Id, 
        mnu.Title, 
        ChildTitle = ch.Title, 
        ch.Url 
       }).AsEnumerable() 
       .GroupBy(row => new { row.Id, row.Title }) 
       .Select(gr => new 
       { 
        gr.Key.Id, 
        gr.Key.Title, 
        Children = gr.Select(c => new { c.ChildTitle, c.Url }).ToList() 
       }); 
+0

感謝 - 但是你的答案似乎屬性「兒童」設置爲我的對象的單個實例 - 「孩子」其實是一個列表 - 我已經試過,但沒有運氣 – user1162591 2012-01-30 21:58:09

+0

我已經想通它同上,只是需要一些幫助過濾掉的子對象 – user1162591 2012-01-30 22:27:47

+0

感謝您的回答和尖端;是否有使用有關的ViewModels的任何例子嗎? – user1162591 2012-02-01 16:18:03

相關問題