NHibernate 过滤器(第十五篇)

本文详细介绍了NHibernate中的过滤器功能,包括如何在映射文件中配置过滤器,并通过示例展示了如何启用过滤器及设置参数值。此外,还提供了查询执行的实际SQL语句,以帮助理解过滤器的作用。

  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

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

转载于:https://www.cnblogs.com/liuguanghai/p/5031878.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值