簡體   English   中英

LINQ到NHibernate,如何做這個查詢

[英]LINQ to NHibernate, how to do this query

我有兩個實體,EntityA和EntityB。 數據庫中的EntityB具有對EntityA.Id的FK引用,因此對於EntityA中的每一行,EntityB中可能存在零行,一行或多行。 通常,這被簡稱為一對多關系。

我有兩個實體用NHibernate 3.2映射,如下所示:

<class name="EntityA" table="EntityA">
    <id name="Id" type="Guid" column="id">
       <generator class="guid.comb" />
    </id>
    <set name="EntityBs" lazy="false" inverse="true" cascade="all" table="EntityB">
        <key column="id" />
        <one-to-many class="EntityB" />
    </set>
    <properties...
</class>
<class name="EntityB" table="EntityB">
    <id name="Id" type="Guid" column="id">
       <generator class="guid.comb" />
    </id>
    <many-to-one name="EntityA" class="EntityA" column="entityAId" />
    <properties...
</class>

我無法弄清楚如何編寫這個LINQ查詢。 我希望EntityB中沒有任何行的EntityA的所有行都具有對EntityA的外鍵引用。

根據其他例子,我發現我嘗試過這樣的事情:

var results = 
                nhSession.Query<EntityA>()
                .Where(x => !x.EntityBs.Any()).ToList();

我希望LINQ-to-NHibernate發出的是:

SELECT 
   id, 
   column1, 
   column2,
   etc..
FROM EntityA 
WHERE id NOT IN (
   SELECT entityAId
   FROM EntityB
)

任何人都可以提供的幫助非常感謝,謝謝。

如果在EntityA和EntityB之間建立雙向關系,則會更容易。 (對不起,NHForge目前正在關閉,否則我會把你鏈接到一些文檔)。

然后你可以像這樣編寫查詢:

Session.Query<EntityA>
    .Where(x => !x.EntityBs.Any())
    .ToList();

在沒有雙向映射的情況下執行此操作在Linq中很難 - 我會使用CreateCriteria或HQL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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