LINQ给NHibernate,如何做这个查询
本文关键字:何做这 查询 NHibernate LINQ | 更新日期: 2023-09-27 18:21:55
我有两个实体,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查询。我希望EntityA的所有行在EntityB中没有任何具有对EntityA的外键引用的行。
根据我发现的其他例子,我尝试过这样的东西:
var results =
nhSession.Query<EntityA>()
.Where(x => !x.EntityBs.Any()).ToList();
我想让LINQ到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。