NHibernate QueryOver可以有一个SQL-where语句吗?

时间:2012-04-25 10:48:14

标签: nhibernate queryover

我是Nhibernate的新手。我的问题是我想通过使用未包含在我的实体中的列(即hbm)来缩小查询范围。我想做这样的事情:

Session.QueryOver<MyEntity>()
    .SQL_Where("MyFlag = 1")

由于我以后没有使用该标志,所以我不想将其包含在实体

我知道我可以使用:

Session
    .CreateSQLQuery("SELECT A,B,C FROM ENTITY WHERE MyFlag = 1")
    .SetResultTransformer(Transformers.AliasToBean<MyEntity>())
    .List<MyEntity>();

使用QueryOver&lt;&gt;()会更好,如果添加了一个列等,它会更安全。

1 个答案:

答案 0 :(得分:2)

您可以使用过滤器: -

对映射类定义设置过滤器,但这会影响所有返回的行

e.g。

<class name="Domain.Model.MyEntity, Domain.Model" table="MyTable" 
       where="(MyFlag=1)">
    ...
</class>

或者可以使用带有QueryOver的条件过滤器

<filter-def name="SetMyFlag">
    <filter-param name=":flag" type="System.Int"/>
</filter-def>

<class name="Domain.Model.MyEntity, Domain.Model" table="MyTable">
   ...
  <filter name="SetMyFlag" condition="(MyFlag=:flag)"/>
</class>

并使用: -

session.EnableFilter("SetMyFlag").SetParameter("flag", 1);
session.QueryOver<MyEntity>();

虽然我从未使用带有未映射列的条件过滤器,但这可能不起作用!