Критерии «многие ко многим» NHibernate - PullRequest
1 голос
/ 30 ноября 2009

У меня есть много-много отношений между кандидатами и должностями. Я пытаюсь ограничить список выбранных позиций следующим образом

ICriteria criteria = this.GetSession().CreateCriteria(typeof(Candidate), "c");
criteria.CreateAlias("c.Positions", "plist",NHibernate.SqlCommand.JoinType.InnerJoin);
criteria.CreateAlias("plist.items", "p",NHibernate.SqlCommand.JoinType.InnerJoin);
criteria.Add(Expression.And
                        (
                            Expression.Eq("c.CandidateID", candidateID),
                            Expression.Eq("p.PositionID", positionID)
                        ));

Однако все позиции выбираются в списке. В чем может быть причина?

1 Ответ

0 голосов
/ 01 декабря 2009

Могу ли я просто уточнить ваши требования? Вы говорите, что хотите вернуть конкретного кандидата и иметь коллекцию позиций кандидата только для того, чтобы она содержала позицию с указанным идентификатором позиции?

Если так, я не думаю, что это работает так. Вы указываете, что хотите получить кандидата с указанным идентификатором, который связан с позицией с указанным идентификатором. Как только кандидат загружен, он затем загружает (лениво или иным образом) все связанных позиций этого кандидата. Это правильное поведение, поскольку кандидат всегда должен иметь доступ ко всем связанным объектам.

Я думаю, вам нужно загрузить кандидата, а затем выполнить поиск в Позиции для поиска Позиции с требуемым идентификатором.

...