1

我是 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<>(),如果添加列等会更安全。

4

1 回答 1

2

您也许可以使用过滤器:-

在您的映射类定义上放置一个过滤器,但这会影响所有返回的行

例如

<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>();

虽然我从来没有对未映射的列使用条件过滤器,所以这可能行不通!

于 2012-04-25T11:05:14.223 回答