NHibernate 3.3.0框架的简单Web小demo

1 篇文章 0 订阅
0 篇文章 0 订阅

     学习NET,一直没有接触过NHibernate框架的菜鸟,在一开始学习NHibernate框架的时候,该框架已经升级到了NHibernate-3.3.0.GA。由于网络上没有很多关于NHibernate关于当前版本的demo,很多的都是NHibernate3.0以前的demo。而3.3.0版本与之前的版本比较,提供的文件内容相差很大,即使是有过2.1之类的版本开发经验的人,也会有一些不知所错吧!对于像我这样的菜鸟,那就更加的手足无措了。好了,接下来说说我自己的第一个名义上的“Hello World”吧!
首先当然还是需要下载NHibernate 3.3.0版本的文件压缩包啦!
我们首先从NHibernate官方主页:http://www.nhforge.org/下载最新版本,由于本人英文很烂,也不知道如何下载历史版本,现在官网上的已经更新到了NHibernate-3.3.1.GA-bin版本了,这个无大碍的。

下载了压缩包之后,解压了之后,我们可以看到解压文件夹NHibernate-3.3.0.GA-bin下的文件内容如下:


Configuration_Templates:主要放的是对于不同版本的数据库连接,配置文件中的内容。

Required_Bins:使用NHibernate框架需要的dll文件。

对比之前2.1版本的内容,Antlr3.Runtime.dll之类的dll文件已经没有了。
Tests:已经生成好dll文件的测试demo。
 而我用到了 Configuration_Templates和Required_Bins两个文件夹下面的内容。再来看看配置文件,
Configuration_Templates文件夹下的MSSQL.cfg.xml中的内容为:

<?xml version="1.0" encoding="utf-8"?>
<!-- 
This template was written to work with NHibernate.Test.
Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it 
for your own use before compile tests in VisualStudio.
-->
<!-- This is the System.Data.dll provider for SQL Server -->
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
	<session-factory name="NHibernate.Test">
		<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
		<property name="connection.connection_string">
			Server=(local);initial catalog=nhibernate;Integrated Security=SSPI
		</property>
		<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
	</session-factory>
</hibernate-configuration>

对比以往的配置文件内容:
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory>
      <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
      <property name="connection.connection_string">
        Data Source=DAVID\SQLEXPRESS;Initial Catalog=YanDa;User ID=sa;Password=111111
      </property>
      <property name="show_sql">true</property>
      <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
      <!--<property name="use_outer_join">true</property>-->
      <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
      <!--<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>-->
      <mapping assembly="iCenter.Repositories"/>

    </session-factory>
  </hibernate-configuration>

注释掉的及部分内容,在3.3.0中已经不需要的,如果一直还把这些配置信息放着,那则会出现各种报错信息了。

好了,前面的一些内容也算是解惑吧,是我在这个过程中遇到过的的项目问题。那么,接下来进入正题。

项目采用的三层架构模式,不过为了简单起见,内容之间在其中的DAL、Model、Web层展示。

首先,还是先说Web应用程序

1. dll引用:

这里我们需要把下载的NHibernate压缩包中Required_Bins下的所有文件都拷贝到Web项目中bin文件夹下,

同时引用Iesi.Collections.dll和NHibernate.dll。当然,这里也需要引用项目dll:DAL和Web

2. web.config配置文件。其中的内容如下:

<?xml version="1.0"?>
<!--
  有关如何配置 ASP.NET 应用程序的详细消息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
	<configSections>
		<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
	</configSections>
	<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
		<session-factory>
			<property name="cache.provider_class">NHibernate.Cache.HashtableCacheProvider, NHibernate</property>
			<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
			<property name="connection.connection_string">
        Data Source=(local);Initial Catalog=Demo;User ID=sa;Password=sa
      </property>
			<property name="show_sql">true</property>
			<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
			<property name="command_timeout">10</property>
			<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
			<mapping assembly="Model"/>
		</session-factory>
	</hibernate-configuration>
</configuration>

具体内容含义,就需要靠大家自己去揣摩了,本人也不是很了解,研究ING。

然后,我们需要介绍的是Model层。

1. 数据表结构

/*==============================================================*/
/* Table: tbAction                                              */
/*==============================================================*/
create table tbAction (
   iActionID            int                  null,
   vcActionName         varbinary(50)        null,
   iActionColumnID      int                  null,
   vcAction             varchar(100)         null,
   iViewMode            int                  null
)


2.我们在Model项目中添加Entity和XmlMapping两个文件夹。

Entity:用来存放持久化类--tbAction.cs

XmlMapping:用来存放xml映射文件--tbAction.hbm.xml

tbAction.cs中的内容:

using System;

namespace Model.Entity{
	 	
	public class tbAction
	{
	
      	
        public virtual int? iActionID
        {
            get; 
            set; 
        }        
		
        public virtual string  vcActionName
        {
            get; 
            set; 
        }        
		
        public virtual int? iActionColumnID
        {
            get; 
            set; 
        }        
		
        public virtual string vcAction
        {
            get; 
            set; 
        }        
		
        public virtual int? iViewMode
        {
            get; 
            set; 
        }        
		   
	}
}

tbAction.hbm.xml中的内容:
<?xml version="1.0"  encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" namespace="Model.Entity">
	<class name="Model.Entity.tbAction,Model" table="tbAction" lazy="false">

    <id name="iActionID" column ="iActionID">
       <generator class ="assigned"/>
   </id>
		<property name="vcActionName" column="vcActionName" type="string"  />
		<property name="iActionColumnID" column="iActionColumnID" type="int"  />
		<property name="vcAction" column="vcAction" type="string"  />
		<property name="iViewMode" column="iViewMode" type="int"  />
				
	</class>
</hibernate-mapping>

<generator class ="assigned"/>中由于数据表中的字段没有设置自增长,这个我们用assigned,如果设置了自增长的话用"native".同时,tbAction.hbm.xml文件的属性设置为如下:

注意:生成操作改为"嵌入的资源"。

接下来的是DAL层

1.dll引用:NHibernate.dll

2.DAL层,我建了两个类,SessionManager.cs和ActionDAL.cs,内容分别为:SessionManager.cs

using NHibernate;
using NHibernate.Cfg;

namespace DAL
{
    public class SessionManager
    {
        private ISessionFactory _sessionFactory;
        public SessionManager()
        {
            _sessionFactory = GetSessionFactory();
        }
        private ISessionFactory GetSessionFactory()
        {
            return (new Configuration()).Configure().BuildSessionFactory();
        }
        public ISession GetSession()
        {
            return _sessionFactory.OpenSession();
        }
    }
}

ActionDAL.cs
using System;
using System.Collections.Generic;
using System.Text;

using Model.Entity;
using NHibernate;
using NHibernate.Cfg;

namespace DAL
{
    public class ActionDAL
    {
        private ISession _session;
        public ISession Session
        {
            set
            {
                _session = value;
            }
        }

        public ActionDAL(ISession session)
        {
            _session = session;
        }

        private static ISession GetSession()
        {
            new Configuration().Configure().BuildSessionFactory();
            ISessionFactory sessionFactory = (new Configuration()).Configure().BuildSessionFactory();
            ISession session = sessionFactory.OpenSession();
            return session;
        }

        public tbAction GetDataByID(int actionID)
        {
            return _session.Get<tbAction>(actionID);
        }

        public IList<tbAction> GetDataForPage()
        {
            return _session.CreateQuery("from tbAction").List<tbAction>();
        }

        public int Save(tbAction action)
        {
            int iResult = (int)_session.Save(action);
            _session.Flush();
            return iResult;
        }
    }
}

 

特别注意:_session.CreateQuery("from tbAction")中的"tbAction"并不是真正意义上的数据表名,而是实体类的类名,即为Model.Entity下的tbAction.cs的类名。

好了,做完上面的操作之后,接下来就是测试上面的内容了,我们这里在Web添加ActionList.aspx页面中做测试,调用DAL层方法来实现。
ActionList.aspx.cs内容

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using NHibernate;
using Model.Entity;
using DAL;



namespace RoleManage.SystemManage
{
    public partial class ActionList : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            SessionManager helper = new SessionManager ();
            ISession session = helper.GetSession();
            //调用DAL方法,获取tbAction表所有信息
               IList<tbAction> tbActions = new ActionDAL(session).GetDataForPage();
            Response.Write(tbActions.Count);
        }
    }
}
好了,整个项目的代码就是这些,通过简单的入门之后,可以学习后续的内容了,推荐 NHibernate之旅系列文章导航 NHibernate之旅系列文章导航


推荐下自己的淘宝小店女装:诗语情裳
   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值