NHibernate:是否可以根据别名添加限制

时间:2009-12-04 17:39:05

标签: nhibernate criteria

假设我创建了一个条件查询并使用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>());

当您只知道bean的属性名称时,是否可以添加限制?您可以使用bean属性名称添加订单,但限制仅显示为使用实际属性名称。我猜这是因为它们在转换之前应用,就像你在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。

1 个答案:

答案 0 :(得分:0)

它应该使用别名点属性名称的名称。 {别名}请将.Name。

或者我误解了你的问题?