在Windows窗体应用程序项目中使用NHibernate-1.2.0.GA入门

本文本示例开发环境vs 2008 beta2,开发语言C#

使用Nhibernate的项目包含以下几个部分:

Nhibernate配置 这里包括数据库类型,驱动,连接字符串,Nhibernate输出等设置,可以写在App.configWeb.config中,或hibernate.cfg.xml中,或指定名称的xml文件中,或程序集的资源中,或直接代码中指定。本文示例采用应用程序配置(app.config/web.config

持久类 就是hibernate返回的对象类型,使用属性存放数据。

映射文件 将持久类各数据进行关联的文件,文件格式为XML。可以单独存放,也可以作为资源编译到程序集中。

数据库 本文使用Access数据库

应用程序 使用Session,查找数据,更新保存数据等。

下边就以这几个部分来创建一个简单的窗体应用程序

配置

打开App.config(如果没有请自行添加)并在<configuration></configuration>之间添加Nhibernate的配置信息:

     <configSections>

         <section

            name="hibernate-configuration"

            type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"

        />

     </configSections>

     <!-- Add this element -->

     <hibernate-configurationxmlns="urn:nhibernate-configuration-2.2">

         <session-factory>

              <propertyname="hibernate.dialect">NHibernate.JetDriver.JetDialect,NHibernate.JetDriver</property>

              <propertyname="hibernate.connection.provider">NHibernate.Connection.DriverConnectionProvider</property>

              <propertyname="hibernate.connection.connection_string">Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db2.mdb;Persist Security Info=True</property>

              <propertyname="connection.driver_class">NHibernate.JetDriver.JetDriver,NHibernate.JetDriver</property>

              <propertyname="show_sql">false</property>

             

              <mappingassembly="QuickStart" />

         </session-factory>

          </hibernate-configuration>

添加持久类

这里延用hibernate文档里的示例,创建一个Cat.cs。

namespace QuickStart

{

    public class Cat

    {

        public Cat()

        {

        }

        public virtual string Id

        {

            get;

            set;

        }

        public virtual string Name

        {

            get;

            set;

        }

        public virtual char Sex

        {

            get;

            set;

        }

        public virtual float Weight

        {

            get;

            set;

        }

    }

}

添加Cat的映射文件

创建文件Cat.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
    namespace="QuickStart" assembly="QuickStart">
 
    <class name="Cat" table="Cat">
 
        <!-- A 32 hex character is our surrogate key. It's automatically
            generated by NHibernate with the UUID pattern. -->
        <id name="Id">
            <column name="CatId" sql-type="char(32)" not-null="true"/>
            <generator class="uuid.hex" />
        </id>
 
        <!-- A cat has to have a name, but it shouldn' be too long. -->
        <property name="Name">
            <column name="Name" length="16" not-null="true" />
        </property>
        <property name="Sex" />
        <property name="Weight" />
    </class>
 
</hibernate-mapping>

创建Access数据库

数据库为2003版,文件名db2.mdb,为方便调试及部署,请db2.mdb包含在项目中。并创建表Cat,表定义如下:

类型

长度

必填字段

主键

Unicode 压缩

CatId

文本

32

 

Name

文本

16

 

Sex

文本

1

   

Weight

数字

单精度型

     

创建一个窗体应用程序

Form1左上角加上两个按钮,button1button2button1Click事件是添加一条新的数据,代码如下:

        private void button1_Click(object sender, EventArgs e)

        {

            ISession session = NHibernateHelper.GetSession();

            ITransaction tx = session.BeginTransaction();

            Cat princess = new Cat();

            princess.Name = "Princess";

            princess.Sex = 'F';

            princess.Weight = 7.4f;

            session.Save(princess);

            tx.Commit();

        }

Button2Click事件显示数据库中所有数据,代码如下:

        private void button2_Click(object sender, EventArgs e)

        {

            ISession session = NHibernateHelper.GetSession();

            ITransaction tx = session.BeginTransaction();

            IQuery query = session.CreateQuery("from Cat c where c.Sex = :sex");

            query.SetCharacter("sex", 'F');

            dataGridView1.DataSource = query.List<Cat>();

            tx.Commit();

        }

最后运行按F5运行项目进行测试。正确运行结果为:启动后按一下button2,在按了button1后,再按button2,如果看到多出来一条数据,则程序正确运行。

posted @ 2007-11-02 11:38  八爻老骥  阅读(589)  评论(0编辑  收藏  举报