3

エンティティGameSystemDAOと、多対1のタイプのGameSystemDAOであるプロパティGameSystemを持つエンティティContestPlanningGSItemDAOがあります。次の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が発生します。指定されたキーが辞書に存在しませんでした。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 に答える