之所以用Nhibernate是因为这个项目最终所用的数据库不确定,可能是sql server也可能是mysql还可能是orancle。而Nhibernate最大的特点就是最后不管使用什么数据库只需要在“方言”(相当于配置文件)中稍微一改就可以了,因为他是数据库访问层,在数据库之上的。
参考的是李永京的“我的Nhibernate之旅”,写的比较详细。而本文的重点是在实际开发中所遇到的问题以及需要注意的问题。
文档地址:http://www.cnblogs.com/lyj/archive/2008/10/10/1308267.html
首先,我先介绍一下我在项目中使用Nhibernate的大体流程。
1。当然是创建经典的三层。
2。编写持久化类和映射文件。
3。利用SchemaExport工具,按照持久化类和映射文件自动生成数据库架构(即在数据库中自动生成各种表和表关系)。
4。编写数据访问层和前台的web页面。
下面再说说我在这个项目中遇到的问题。
1。HQL
在Nhibernate中查询推荐用它的专用查询语言“HQL”,语法和linql差不多,如果实在用不习惯也可以用“原生sql”。但是用HQL只能“select”即查询,如果你想要update、delete、insert等操作那就不行了。
2。Insert, Update, Delete操作
Insert;调用ISession.Save();
Update;调用ISession.Delete();
Delete;改变它的一些属性;调用ISession.Update();
并且这些操作要求ISession使用事务
3。NHibernate中映射关系
NHibernate中映射关系是NHibernate中的亮点,也是最难掌握的技术。原文作者对这一部分讲解的不多,特别是多对多关系。而我的项目中表之间的关系比较复杂,导致我卡了挺长的时间才解决。
在映射文件中不同映射关系
在持久化类中对应如下
4。在网站页面中应用Nhibernate
这部分原文没有涉及到,并且网上的例子也不是很多。
首先需要配置web.config,把配置信息加进去。
画红线部分就是使用的何种数据库,如果数据库变了,这部分修改即可。
然后把需要用到的.dll文件添加到bin目录中。
5.在web表现层中的.cs文件中使用Nhibernate
首先引用命名空间
然后使用BLL层中的方法就可以了,需要注意的是“级联操作”是一个比较难的地方。