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();
感謝 - 但是你的答案似乎屬性「兒童」設置爲我的對象的單個實例 - 「孩子」其實是一個列表 - 我已經試過,但沒有運氣 –
user1162591
2012-01-30 21:58:09
我已經想通它同上,只是需要一些幫助過濾掉的子對象 – user1162591 2012-01-30 22:27:47
感謝您的回答和尖端;是否有使用有關的ViewModels的任何例子嗎? – user1162591 2012-02-01 16:18:03