Я считаю, что порядок ваших операторов заставляет запрос генерировать нежелательный SQL, который вы получаете (следовательно, никаких результатов).
Вот как это должно быть:
public static IList<Person> GetFriends(Person person, int count)
{
Person personAlias = null;
Person friendAlias = null;
ICriteria criteria = NHibernateSessionManager.Instance.GetSession()
.CreateCriteria(typeof (Person), () => personAlias)
.CreateCriteria(() => personAlias.Friends, () => friendAlias, JoinType.LeftOuterJoin)
.Add<Person>(p => p.ID == person.ID)
.CreateCriteria(() => personAlias.MainProfileImage, JoinType.InnerJoin)
.CreateCriteria(() => personAlias.MainProfileImage.MediumThumbnail, JoinType.InnerJoin)
.AddOrder(() => personAlias.LatestLogin, Order.Desc)
.SetMaxResults(count);
return criteria.List<Person>();
}
Кроме того, из вашего описания не ясно, из какой ассоциации вы хотите получить данные MainProfileImage и MediumThumbnail. Поскольку вы используете его в своем заявлении о критериях, вы запрашиваете данные из основного объекта Person, друзей которого вы получаете, когда используете friendsAlias
. Я изменил его на использование personAlias
вместо этого, так как считаю, что именно здесь вы хотите связать данные.