NHibernate 过滤器(第十五篇)

NHibernate 过滤器(第十五篇)

  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", 2);
                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

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

时间: 2024-10-07 13:19:23

NHibernate 过滤器(第十五篇)的相关文章

NHibernate 存储过程 第十四篇

NHibernate 存储过程 第十四篇 NHibernate也是能够操作存储过程的,不过第一次配置可能会碰到很多错误. 一.删除 首先,我们新建一个存储过程如下: CREATE PROC DeletePerson @Id int AS DELETE FROM Person WHERE PersonId = @Id; 修改映射文件,添加删除对象的存储过程: <?xml version="1.0" encoding="utf-8" ?> <hiber

秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题 在<秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量>中对经典多线程同步互斥问题进行了回顾和总结,这篇文章对Windows系统下常用的线程同步互斥机制——关键段.事件.互斥量.信号量进行了总结.有网友问到互斥量能处理“遗弃”问题,事件和信号量是否也能处理“遗弃”问题.因此本文将对事件和信号量作个试验,看看事件和信号量能否处理“遗弃”问题. 一.

Python之路【第十五篇】:Web框架

Python之路[第十五篇]:Web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #!/usr/bin/env python #coding:utf-8   import socket   def handle_request(client):     buf = client.recv(10

第十五篇 Integration Services:SSIS参数

本篇文章是Integration Services系列的第十五篇,详细内容请参考原文. 简介在前一篇,我们使用SSDT-BI将第一个SSIS项目My_First_SSIS_Project升级/转换到SSIS 2012.在这一篇,我们将探讨SSIS变量的姊妹:SSIS参数.我们将展示参数配置,通过包参数管理动态属性值,以及在SSIS包执行期间参数是如何配置和使用的.首先在SSDT-BI打开转换过的My_First_SSIS_Project,如图15.1所示:图15.1My_First_SSIS_P

第十五篇 和谐

第十五篇  和谐 "和谐"对于整个宇宙来讲至关重要,无论是宇宙自身空间的环境还是万物之间都需要和谐.如果在任何方面或任何领域出现不和谐的因素,就会对宇宙本身及宇宙中的万物带来很大的影响.这种影响大可以使宇宙规律出现混乱,小也会造成宇宙空间中的万物出现变异. 以上讲的这些是针对整个大宇宙背景所作出的描述.从这些真相当中我们可以知道人类世界同样也需要和谐.因为不和谐,我们就无法向上发展.如今人类世界就有很多的空间出现不和谐的因素,这些不和谐的因素一直障碍着整个人类世界的发展.这样的状况,只

解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)

解剖SQLSERVER 第十五篇  SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-source-for-stored-procedures/ 目前我正在扩展OrcaMDF Studio的功能 不单只支持系统表,DMVs 和用户表 而且也要支持存储过程.那很容易,我们只需要查询sys.procedures --或者查询sys.sysschobjs, 因为当SQLSERVER没有在运行的时候我

Java进阶之欧拉工程 第十五篇【网格路径问题】

网格路径问题,中文翻译如下: 从 22的格子的左上角开始,只允许向右和向下移动,一共有六种路径可以抵达右下角 那么在2020的路径中一共有多少条这样的路径? 原题如下: Starting in the top left corner of a 22 grid, and only being able to move to the right and down, there are exactly 6 routes to the bottom right corner. How many such

Java进阶之欧拉工程 第十五篇【2的1000次方各位之和为多少】

题目如下: 215 = 32768 并且其各位之和为 is 3 + 2 + 7 + 6 + 8 = 26. 21000 的各位数之和是多少? 原题如下: 215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. What is the sum of the digits of the number 21000? 解题思路:这道题和之前的大数求和的思想有点类似,就是用数组存储大数的每一位数,然后相加,上次写的大数相加的函数稍作

Egret入门学习日记 --- 第二十五篇(书中 9.16~9.17 节 内容)

第二十五篇(书中 9.16~9.17 节 内容) 对于昨天的关于 List 组件使用的问题,我打算到书中提到List之后,再回头补充. 还有就是 Scroller 的 TileLayout 布局方式,也要去研究一下. 好了,开始按照书中内容一步一步走. 开始 9.16节. 重点: 1.设定TabBar皮肤. 2.设置TabBar布局. 操作: 1.设定TabBar皮肤. 第一步,准备素材! 第二步,创建 exml 文件! 第三步,拖入组件!约束大小! 第四步,增加两个状态 down 和 up.