我有一个实体 GameSystemDAO 和一个实体 ContestPlanningGSItemDAO,其属性 GameSystem 是 GameSystemDAO 类型的多对一。什么是对应于以下 SQL 的 QueryOver 表达式?
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: The given key was not present in the dictionary。似乎 NHibernate 正在 ContestPlanningGSItemDAO 实例上寻找名为gameSystemAlias的属性。
我究竟做错了什么?