NHibernate实践与模式
NHibernate实践与模式
NHibernate是一款非常优秀的O/R mapping的开源框架,再还没有.net的时候它已经存在于java环境中。
下面我们先看一下它的框架
工作原理
将数据库表结构映射成实体类(xml-mapping文件,实体类 ,class文件),支持一对多,多对一,多对多的关系,默认生成对这些表的CURD操作,包括多表脊联操作(select,insert,update,delete),也可以通过xml文件的配置作自定义的查询,或是调用存储过程。
CURD的操作语句可以从源代码看,它是生成的是参数形势的sql脚本并且支持特别的参数,如,oracle的to_date,to_char等;
从上图可以看出实现了数据库的无关性,开发人员无须关心底层的数据库类型。也没有比必要再去为对数据库表的操作写任何t-sql脚本,只需要专著业务层面的开发。从而大大减少sql层的bug和开发时间,提高开发效率。
开发环境
Vs.net 2005, NHibernate 1.20(正是版),MyGeneration 1.3。
MyGeneration是一款开源代码生成工具,它的模块更新比较快而且相对于一些开源的项目支持的比较多,所以我选它,而没有选择codesmith。
当然还有很多NHibernate的开发框架大家可以在www.codeproject.com,www.codeplex.com上找到。
开发步骤
一般我们是在先有数据库表结构的情况下,一层一层往上写,先创建数据库表,然后写数据库访问层的代码(可以通过一些通用的ado.net类库完成如 Enterpriselibrary),接下来开始编写业务曾代码,和UI实现。
当然也可以反过来。先把业务实体抽象出来,包括需要实现的功能,操作,返回的信息,通过对业务实体。然后再去创建数据库表,和UI的部分;
我还是按在有数据表的情况下如何用NHibernate作开发
1.用MyGeneration创建实体类和mapping文件选择NHibernate lujan99 1.06这个模 块他提供可以方便实现1-n,n-1,n-n的mapping非常方便使用
2.在项目中加载这些创建好的文件建议加载到一个新的项目比如BusinessModule。
3.接下去网上下载几个通用的类库文件包括配置文件NHibernateSessionManager.cs(用来创建session和管理session), NHibernateSessionModule.cs(将session绑定到每个http请求上去), hibernate.cfg.xml(配置信息,包括数据库类型,连接字符窜,加载的实体类程序集)。
4.修改一下web.config文件加载NHibernateSessionModule
<modules>
<addname="ScriptModule"preCondition="integratedMode"type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</modules>
5.基本配置完成,下面就是开始写代码了
代码实践与模式
下面是我的设计实现。
定义CRUD的接口使用了一个范性,实现这个接口的是我定义的两个IApplicationRepository,ISiteRepository两个接口,这两个只对IRepository的范性作了实现. 另外如果需要对业务逻辑的抽象操作在这里扩展它的方法。
开发一个AbstractRepository实现IRepository这个接口的CRUD操作。SiteAddressRespository基层AbstractRepository实现ISiteAddressRespository里面定义的业务逻辑,作为SiteAddressRespository这个的代码只需要包括实现ISiteAddressRespository定义的接口方法,而无需再去实现CRUD的操作。减少了代码编写工作。
开发一个抽象工厂类(其实这里用一个简单工厂模式也能实现)去创建ISiteRepository,IApplicationRepository,降低代码之间的耦合度。
总结
使用O/R mapping确实能够提高开发效率,减少了开发过程中产生的低级bug,对新手很容易上手,对整个项目的层次更加明显,耦合度降低。方便扩展,很好的隔离变化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix