2012-01-30 4 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 및 제목 속성
  • Children 컬렉션 (위의 두 속성 만 포함)

각 주 개체의 모든 속성과 각 자식 개체의 모든 속성을 과도한 부담으로로드하지 않으려합니다.

Nhibernate Linq를 사용하여 주 개체의 속성 만 다시 가져 왔지만 하위 개체에 대해 동일한 작업을 수행하도록 쿼리를 수정하려면 어떻게해야합니까? (???)

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

---------------- 편집 -------------------- -

나는이 일을하고 있지만 where 절이 없습니다. 관계에 관계없이 모든 MenuObject 인스턴스의 목록에 'Children'을 설정하고 있습니다. 분명히 합법적 인 하위 객체를 추가하기를 원합니다. 각 부모 객체 - 아무도 도와 줄 수 있습니까? 감사합니다

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

+0

와 내가 냈어요 위와 같이 끝내지 만 자식 객체를 필터링하는 데 도움이 필요합니다. – user1162591

+0

답변과 팁을 보내 주셔서 감사합니다. ViewModels를 사용하는 예가 있습니까? – user1162591