簡體   English   中英

如何使用NHibernate查詢外鍵列,而不檢索相關實體

[英]How to query a foreign key column with NHibernate, without retrieving the related entity

說我有兩個班: ParentChild 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM