NHibernate + QueryOver:如何通过 ID 加入未映射的实体?

NHibernate + QueryOver: How to join unmapped entity by ID?

给定的是 table A,其列为 EntityType(指定 B 类型的 Entity/Table 或 C 类型的 Entity/Table 的枚举)和 EntityID([= 中条目的 ID) 33=] B 或 table C).

classB 和 C 都实现了 IBC 接口,classA 有一个 属性 IBC。

这行得通,但是当我有一个 A 并访问 属性 IBC 时,它将再查询 select table B 或 C 的行。如果我有很多 A 会做很多查询。

我想使用 NHibernate QueryOver 执行此查询,这样就不会再有其他查询:

select * 来自 A a 在 b.ID = a.EntityID 上离开加入 B b 在 c.ID = a.EntityID

上左加入 C c

有没有可能?

谢谢。

查看NH 5.0最新功能

17.5. Join entities without association (Entity joins or ad hoc joins)

小引用:

In QueryOver you have the ability to define a join to any entity, not just through a mapped association. To achieve it, use JoinEntityAlias and JoinEntityQueryOver. By example:

Cat cat = null;
Cat joinedCat = null;

var uniquelyNamedCats = sess.QueryOver<Cat>(() => cat)
    .JoinEntityAlias(
        () => joinedCat,
        () => cat.Name == joinedCat.Name && cat.Id != joinedCat.Id,
        JoinType.LeftOuterJoin)
    .Where(() => joinedCat.Id == null)
    .List();