NHibernate过滤器相当于定义一个非常类似于类和集合上使用的where子句。ISession 中默认是不启用过滤器的,必须通过ISession.EnableFilter()方法显式的启用。 该方法返回被启用的IFilter的实例。这也支持链式操作。

  过滤器主要的配置都在映射文件内完成。来看示例:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Model.PersonModel, Model" table="Person1">
<!-- 配置缓存策略 -->
<cache usage="read-write"/>
<id name="Id" column="PersonId" type="Int32">
<generator class="native"/>
</id>
<property name="Name" column="PersonName" type="String"/>
<many-to-one name="School" column="SchoolId" not-null="true" class="Model.SchoolModel,Model" foreign-key="FK_Person_School" />
<filter name="TestFilter" condition="CountryId BETWEEN :CIDStart AND 4"/>
</class>
<!-- 定义NHibernate过滤器 -->
<filter-def name="TestFilter">
<filter-param name="CIDStart" type="Int32"/>
</filter-def>

</hibernate-mapping>

  操作:

        static void Main(string[] args)
{
ISessionFactory _sessionFactory = new Configuration().Configure().BuildSessionFactory();
using(ISession NSession = _sessionFactory.OpenSession())
{
//显示启用过滤器,并设置参数值
NSession.EnableFilter("TestFilter").SetParameter("CIDStart", );
IList<PersonModel> ListPerson = NSession.Query<PersonModel>().ToList(); foreach (PersonModel p in ListPerson)
{
Console.WriteLine(p.Name);
}
}
Console.ReadKey();
}

  虽然我们的Linq查询并没有添加任何条件,但是SQL Server监视器监控到执行的SQL语句为:

exec sp_executesql N'select personmode0_.PersonId as PersonId1_, personmode0_.PersonName as PersonName1_, personmode0_.SchoolId as SchoolId1_ from Person1 personmode0_ where
personmode0_.CountryId BETWEEN @p0 AND 4',N'@p0 int',@p0=2

  虽然这个东西很不错,但是感觉用处不是太大,因为只是相当于增加了某些条件,这些直接在程序语句中就可以做到,个人觉得没有什么必要移到配置文件文件中完成。

  

最新文章

  1. JS最基础的获取元素的值实现加减乘除运算
  2. WIN7系统操作快捷键
  3. ArcGIS操作问题
  4. 批处理DataTable
  5. R语言diagram包画订单状态流图
  6. Esper系列(五)Order by、Limit、构建事件流、Updating an Insert Stream
  7. IOS传值之代理传值(一)
  8. Maven学习(三)
  9. linux中的权限
  10. Common Bit Tasks
  11. 【English】四、Y结尾名词变复数
  12. MyCat | 分库分表实践
  13. Excel数据与DateTable数据的转换
  14. 小程序movable-area置于顶层遮盖下方元素无法操作的解决方案
  15. Python学习笔记第十周
  16. insert-delete-getrandom-o1-duplicates-allowed
  17. FastReport.Net使用:[32]对话框使用2
  18. [水煮 ASP.NET Web API2 方法论](12-3)OData 查询
  19. Node.js m03122图片批量下载爬虫1.00
  20. elasticsearch 概念

热门文章

  1. monkey测试===修改adb的默认端口
  2. UNIX v6
  3. [c++,bson] linux 使用 BSON 编程[www]
  4. sicily 1063. Who&#39;s the Boss
  5. C中级 消息队列设计
  6. C json实战引擎 一 , 实现解析部分
  7. UCenter创始人、Discuz!创始人、管理员账号的认知(转)
  8. 基于UDP套接字编程实例
  9. 爬虫 requests模块高级用法
  10. hdu 2686&amp;&amp;hdu 3376(拆点+构图+最小费用最大流)