Критерии "многие ко многим" NHibernate
У меня есть много-много отношений между кандидатами и должностями. Я пытаюсь ограничить список позиций следующим образом
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 ответ
Могу ли я просто уточнить ваши требования? Вы хотите сказать, что хотите вернуть конкретного кандидата и иметь коллекцию позиций кандидата только для того, чтобы содержать позицию с указанным идентификатором позиции?
Если так, я не думаю, что это работает так. Вы указываете, что хотите получить кандидата с указанным идентификатором, который связан с позицией с указанным идентификатором. Как только Кандидат загружен, он загружает (лениво или нет) все связанные с этим Позиции кандидата. Это правильное поведение, поскольку кандидат всегда должен иметь доступ ко всем связанным объектам.
Я думаю, что вам нужно сделать, это загрузить кандидата, а затем искать в коллекции позиций для позиции с идентификатором, который вам требуется.