我是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;()会更好,如果添加了一个列等,它会更安全。
答案 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>();
虽然我从未使用带有未映射列的条件过滤器,但这可能不起作用!