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();
给定的是 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();