NHibernate 过滤器(第十五篇)
2024-09-27 02:55:10
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
虽然这个东西很不错,但是感觉用处不是太大,因为只是相当于增加了某些条件,这些直接在程序语句中就可以做到,个人觉得没有什么必要移到配置文件文件中完成。
最新文章
- JS最基础的获取元素的值实现加减乘除运算
- WIN7系统操作快捷键
- ArcGIS操作问题
- 批处理DataTable
- R语言diagram包画订单状态流图
- Esper系列(五)Order by、Limit、构建事件流、Updating an Insert Stream
- IOS传值之代理传值(一)
- Maven学习(三)
- linux中的权限
- Common Bit Tasks
- 【English】四、Y结尾名词变复数
- MyCat | 分库分表实践
- Excel数据与DateTable数据的转换
- 小程序movable-area置于顶层遮盖下方元素无法操作的解决方案
- Python学习笔记第十周
- insert-delete-getrandom-o1-duplicates-allowed
- FastReport.Net使用:[32]对话框使用2
- [水煮 ASP.NET Web API2 方法论](12-3)OData 查询
- Node.js m03122图片批量下载爬虫1.00
- elasticsearch 概念
热门文章
- monkey测试===修改adb的默认端口
- UNIX v6
- [c++,bson] linux 使用 BSON 编程[www]
- sicily 1063. Who&#39;s the Boss
- C中级 消息队列设计
- C json实战引擎 一 , 实现解析部分
- UCenter创始人、Discuz!创始人、管理员账号的认知(转)
- 基于UDP套接字编程实例
- 爬虫 requests模块高级用法
- hdu 2686&;&;hdu 3376(拆点+构图+最小费用最大流)