zoukankan      html  css  js  c++  java
  • 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

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

      

  • 相关阅读:
    ubuntu18.04 切换python版本
    chart
    tox -e py27报错
    ubuntu 18.04配置静态ip,解决无法上网问题,解决resolv.conf配置文件被覆盖
    ubuntu 18.04输入法问题
    openstack 王者归来学习笔记
    nova client和nova restfull api区别
    nova-api nova-compute 启动服务的时候有的没有加配置文件有的加了
    go语言基本语法
    【转】 Docker和CI/CD实战
  • 原文地址:https://www.cnblogs.com/kissdodog/p/3332537.html
Copyright © 2011-2022 走看看