Скажем, я создаю запрос критерия и преобразую его с помощью преобразователя результатов AliasToBean.
session.CreateCriteria<Staff>("s")
.CreateAlias("supervisor", "super")
.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("s.name"), "name")
.Add(Projections.Property("super.name"), "supervisor_name"))
.SetResultTransformer(Transformers.AliasToBean<StaffView>());
Можно ли добавить ограничение, если вы знаете только имя свойства бина? Вы можете добавить AddOrder, используя имена свойств бина, но ограничения появляются только для работы с реальным именем свойства. Я предполагаю, что это потому, что они применяются до преобразования, так же, как вы не используете псевдоним столбца в предложении where, но вы можете в следующем порядке:
//throws exception like cannot find property supervisor_name in Staff class
//only "super.name" works
.Add(Restrictions.Like("supervisor_name", "blah"))
//this works though
.AddOrder(Order.Asc("supervisor_name"))
Так что в основном мне нужен способ получить псевдонимное имя свойства на основе псевдонима. Я могу придумать несколько способов сделать это, но я надеялся, что в NHibernate есть какой-то существующий метод? Я мог бы, например, сохранить отдельную карту свойства для псевдонимов или просто сопоставить с представлением базы данных, чтобы не было необходимости преобразовывать его в bean.