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
虽然这个东西很不错,但是感觉用处不是太大,因为只是相当于增加了某些条件,这些直接在程序语句中就可以做到,个人觉得没有什么必要移到配置文件文件中完成。
分类:
框架:NHibernate
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述