我有一个实体GameSystemDAO和一个实体ContestPlanningGSItemDAO,其属性GameSystem是一个多对一的GameSystemDAO类型。什么是QueryOver表达式,它对应于以下SQL?
select *
from gamesystemdao g
where not exists (
select *
from contestplanninggsitemdao cpgsi
where cpgsi.gamesystem = g.id)
我尝试了以下(以及许多其他变体):
GameSystemDAO gameSystemAlias = null;
ContestPlanningGSItemDAO contestPlanningGSItemAlias = null;
List<GameSystemDAO> newGameSystems = session.QueryOver<GameSystemDAO>(() => gameSystemAlias)
.WithSubquery
.WhereNotExists(
QueryOver.Of<ContestPlanningGSItemDAO>(() => contestPlanningGSItemAlias)
.Where(() => contestPlanningGSItemAlias.GameSystem.Id == gameSystemAlias.Id)
.Select(c => c.GameSystem))
.List();
但总是得到 KeyNotFoundException:字典中没有给定的密钥。似乎NHibernate正在ContestPlanningGSItemDAO实例上寻找名为 gameSystemAlias 的属性。
我做错了什么?
答案 0 :(得分:1)
交换
QueryOver.Of<ContestPlanningGSItemDAO>(() => contestPlanningGSItemAlias)
.Where(() => contestPlanningGSItemAlias.GameSystem.Id == gameSystemAlias.Id)
.Select(c => c.GameSystem))
与
QueryOver.Of<ContestPlanningGSItemDAO>()
.Where(x => x.GameSystem == gameSystemAlias))
答案 1 :(得分:0)
我发现更新到NHibernate 3.3.1可以使用它;我当时正在使用NH 3.2.0