代码改变世界

NHibernate Step By Step(8)-数据过滤器

  Clingingboy  阅读(738)  评论(0编辑  收藏  举报


1.定义过滤器

<filter-def name="LiveFilter">
     <filter-param name="LiveParam" type="boolean"/>
 </filter-def>
 
 <filter-def name="LiveFilter2">
     <filter-param name="LiveParam2" type="string"/>
 </filter-def>

2.在映射文件中使用过滤器

犹如在hql中下查询语句

<class name="TestClass">
     <id name="Id" column="id">
         <generator class="assigned" />
     </id>
     <property name="Name" type="StringClob" length="100000" />
 
     <property name="Live" type="Boolean" />
     <filter name="LiveFilter" condition=":LiveParam = Live"/>
     <filter name="LiveFilter2"><![CDATA[Name = :LiveParam2]]></filter>
 </class>

3.在配置文件中获取过滤器

public void FilterDefinitionsLoadedCorrectly()
 {
     Configuration cfg = new Configuration();
     cfg.AddResource(mappingCfg, this.GetType().Assembly);
     Assert.AreEqual(cfg.FilterDefinitions.Count, 2);
 
     Assert.IsTrue(cfg.FilterDefinitions.ContainsKey("LiveFilter"));
 
     FilterDefinition f = cfg.FilterDefinitions["LiveFilter"];
 
     Assert.AreEqual(f.ParameterTypes.Count, 1);
 
     BooleanType t = f.ParameterTypes["LiveParam"] as BooleanType;
 
     Assert.IsNotNull(t); //ensure that the parameter is the correct type. 
 }

4.启动过滤器

ISession</TT对象中会用到的方法有: class=literal EnableFilter(string filterName), GetEnabledFilter(string filterName), 和 DisableFilter(string filterName). ISession 中默认是不启用过滤器的,必须通过ISession.EnableFilter()方法显式的启用。 该方法返回被启用的IFilter的实例

通过启用EnableFilter方法启用过滤器

public void FiltersLoaded()
 {
     Configuration cfg = new Configuration();
     cfg.AddResource(mappingCfg, this.GetType().Assembly);
 
     ISessionFactory factory = cfg.BuildSessionFactory();
 
     ISession session = factory.OpenSession();
 
     IFilter filter = session.EnableFilter("LiveFilter");
 
     Assert.AreEqual(filter.FilterDefinition.FilterName, "LiveFilter");
 
     filter.SetParameter("LiveParam", true);
 
     filter.Validate(); // make sure that everything is set up right. 
 
     IFilter filter2 = session.EnableFilter("LiveFilter2");
 
     filter2.SetParameter("LiveParam2", "somename");
 
     filter2.Validate();
 }

IFilter接口

image_2

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2009-08-26 Spring.NET学习笔记(6)-基础AOP
点击右上角即可分享
微信分享提示