2009-11-30 2 views
0

У меня есть много разных отношений между кандидатами и позициями. Я пытаюсь ограничить список позиций, выбранных как следует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) 
         )); 

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

ответ

0

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

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

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