NHibernate与QueryOver不存在

时间:2012-07-11 16:54:10

标签: nhibernate queryover

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

我做错了什么?

2 个答案:

答案 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