3

我有一个实体 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的属性。

我究竟做错了什么?

4

2 回答 2

1

交换

QueryOver.Of<ContestPlanningGSItemDAO>(() => contestPlanningGSItemAlias)
    .Where(() => contestPlanningGSItemAlias.GameSystem.Id == gameSystemAlias.Id)
    .Select(c => c.GameSystem))

QueryOver.Of<ContestPlanningGSItemDAO>()
    .Where(x => x.GameSystem == gameSystemAlias))
于 2012-07-12T09:01:40.953 回答
0

我发现更新到 NHibernate 3.3.1 可以让它工作;我使用的是 NH 3.2.0

于 2012-07-12T10:30:36.357 回答