NHibernate3学习笔记(一)--第一个NHibernate程序

开发环境:VS2010(C#)+NHibernate3.3.0GA+MSSQL2008+MBUnit3

一、前言

最近开始玩NHibernate,从网上下了一老外2008年录的NHibernate夏季之旅(Summer of Nhibernate)长14集的录像,一边看一边动手;录像每集大概90分钟,讲的都是很基础的东西,但无奈本人英语不好,只能慢慢看,慢慢试验,顺便把心得体会写下来。

二、数据库

1.准备好一个数据库,我在MSSQL2008中新建了一个hhibTest(名字乱写的)数据库,在其中新建一个表Customer。

USE [hhibTest]
GO

/****** Object:  Table [dbo].[Customer]    Script Date: 05/09/2012 20:08:37 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Customer](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[FirstName] [nchar](50) NULL,
	[LastName] [nchar](50) NULL
) ON [PRIMARY]

GO

三、工程建立

1.打开VS2010,新建一个C#的类库工程,具体结构如下。

其中DataTransfer是实体类,DataAccessLayer是数据存取类,DataAccessLayerTest是测试类。

2.开始要用NHibernate了,在DataTransfer中建立Customer类。

 public class Customer
    {
        public virtual int CustomerId { set; get; }
        public virtual string FirstName { set; get; }
        public virtual string LastName { set; get; }
    }


上面我用了VS的新特性:自动属性,程序看起来简洁多了,嘿嘿。

注意:使用NHibernate的话对象类的属性要为Virtual。

3.在DataTransfer类中新建Customer.hbm.xml文件。

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DataTransfer">
  <class name="DataTransfer.Customer,DataTransfer" table="customer">
    <id name="CustomerId" column="id" type="Int32" unsaved-value="0">
      <generator class="native"></generator>
    </id>

    <property name="FirstName" column="FirstName" type="string" length="50" not-null="false" />
    <property name="LastName" column="LastName" type="string" length="50" not-null="false" />
  </class>
</hibernate-mapping>


NHibernate就是通过这个文件将实体类与数据库中的标对应起来,到此为止DataTransfer类就完成了,Build一下,0 error,0 warning!

4.在DataTransfer类中引用NHibernate.dll文件,当然还要引用刚刚生成的DataTransfer.dll。

在VS中使用NHibernate3要用到这几个dll文件,可以把这几个文件放到一个文件夹里放着。

5.在DataAccessLayer中添加NhibernateDataProvider类,此类用于读取数据库。

public class NhibernateDataProvider
    {
        public Customer GetCustomerById(int customerId)
        {
            NHibernate.Cfg.Configuration config = new NHibernate.Cfg.Configuration();
            config.Configure("hibernate.cfg.xml");
            NHibernate.ISessionFactory sessionFactory = config.BuildSessionFactory();

            NHibernate.ISession session = sessionFactory.OpenSession();

            return session.Get<Customer>(customerId);
        }
    }

6.好了,这个类也完成了,生成一下。

四、测试

1.使用MBUnit进行测试,在DataAccessLayerTest中导入Gallio.dll及MBUnit.dll文件。

2.导入DataAccessLayer.dll及DataTransfer.dll和NHibernate.dll。

3.新建一个测试类。

 [TestFixture]
    public class Tests
    {
        [Test]
        public void CanGetCustomerById()
        {
            DataAccessLayer.NhibernateDataProvider provider = new DataAccessLayer.NhibernateDataProvider();

            Assert.AreEqual(1,provider.GetCustomerById(1).CustomerId);
        }


    }

4.新建一个hibernate.cfg.xml文件,此文件是NHibernate核心配置文件。

<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=hhibTest;Integrated Security=True
    </property>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <mapping assembly="DataTransfer" />
  </session-factory>
</hibernate-configuration>


5.OK,都弄完了,Build一下。

6.使用Gallio Icarus进行测试!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值