NHibernate - 帮助ICriteria

时间:2011-03-28 12:09:28

标签: nhibernate nhibernate-criteria

我正在尝试将以下SQL查询转换为NHibernate中的ICriteria。

SELECT DISTINCT m.typeId, t.typeName
FROM Models m, Types t
WHERE m.qualifier=? AND m.typeId IS NOT NULL AND m.typeId = t.typeId

这些都在NHibernate中映射到名为Models和ModelType的类中。 ICriteria.List应返回ModelType类型的列表。

由于

1 个答案:

答案 0 :(得分:1)

有好消息和坏消息。您可以创建将返回ModelType列表的条件。但是,它们不会被会话管理。原因是,一个独特的查询只能返回一个投影,而投影总是不受管理。

下面的查询将生成与上述类似的查询,因为它执行两个实体之间的内部联接,并基于这两个列返回不同的集合。应将结果转换器设置为生成可通过属性设置的某种类型。您可以返回ModelTypes列表,但只知道它们不会被会话管理。

Session.CreateCriteria<Model>()
   .CreateAlias("Type", "t")
   .Add(Restrictions.Eq("Qualifier", myQualifier)
   .SetProjection(Projections.Distinct(
       Projections.ProjectionList()
          .Add(Projections.Alias(Projections.Property("t.Id"), "Id"))
          .Add(Projections.Alias(Projections.Property("t.TypeName"), "TypeName"))))
   .SetResultTransformer(Transformers.AliasToBean<ModelType>())