[英]How to query a foreign key column with NHibernate, without retrieving the related entity
說我有兩個班: Parent
和Child
。 Parent
有一個屬性Children
,它當然是Child
對象的集合。
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>
現在這就是我想要做的事情:我希望獲得具有特定ParentId
所有Child
對象。 我知道我可以先獲得Parent
,然后返回其Children
屬性。 但是,如果我想直接查詢Child
表怎么辦?
如果它是一個映射屬性(例如, Name
),我可以使用NHibernate的標准,但在這種情況下,不映射ParentId
。
我嘗試過使用類似的東西:
criteria.Add(Restrictions.Eq("Parent.Id", 1));
但這不起作用。 我使用了SQLCriterion(如這里所解釋的),但是一位朋友/同事讓我覺得必須有更好的方法。
有任何想法嗎? 有投影和Restrictions.EqProperty
東西?
您必須為關聯路徑添加別名。 這將返回Parent的代理,假設使用延遲加載。 您可以訪問父級的Id屬性而不會觸發加載。
return _session.CreateCriteria<Child>()
.CreateAlias("Parent", "parent")
.Add(Restrictions.Eq("parent.Id", parentId))
.List<Child>();
我已經使用查詢完成了這個。 這是一個例子:
Child foundChild =
session.QueryOver<Child>()
.Where(x => x.Parent.Id == 1234).SingleOrDefault<Child>();
我認為可以通過Criteria這樣做:
criteria.Add(Restrictions.Eq("Parent", Session.Load<Parent>(1));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.