假設我有兩個類:Parent
和Child
。 A Parent
有一個屬性Children
,這當然是一個Child
對象的集合。如何使用NHibernate查詢外鍵列而不檢索相關實體
Child
沒有ParentId
屬性。它具有Parent
屬性。
所以,我對Child
NHibernate的映射包括:
<many-to-one name="Parent" class="Parent" column="ParentId" cascade="save-update" />
而且我Parent
映射包括:
<bag name="children" access="field" inverse="true" cascade="all-delete-orphan">
<key column="ParentId" />
<one-to-many class="Child" />
</bag>
現在,這裏就是我想做的事:我想所有的Child
對象與一定的ParentId
。我知道我可以先獲得Parent
,然後返回其Children
財產。但是如果我想直接查詢Child
表呢?
如果它是一個映射屬性(例如,Name
),我可以使用NHibernate的標準,但在這種情況下,ParentId
未映射。
我嘗試使用類似:
criteria.Add(Restrictions.Eq("Parent.Id", 1));
但是,這並不工作。我訴諸於使用SQLCriterion(如解釋here),但一位朋友/同事讓我覺得必須有更好的方法。
任何想法?與預測和Restrictions.EqProperty
?
這給了我最乾淨的SQL(請參閱我對Jamie Ide的回答的評論),雖然差別不是太大。 – Peter 2012-01-11 08:04:38
如果它找到父項的多個子項,將會引發異常。將SingleOrDefault更改爲List以返回父項的所有子項。 – 2012-01-11 12:46:33
確實,我確實使用了List:session.QueryOver().Where(x => x.Parent.Id == 1234).List() –
Peter
2012-01-17 07:47:47