zoukankan      html  css  js  c++  java
  • 在Windows窗体应用程序项目中使用NHibernate1.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,如果看到多出来一条数据,则程序正确运行。

  • 相关阅读:
    [学习笔记]Nim游戏&SG函数
    [vijos1783][NOIP2012]疫情控制
    [vijos1782][NOIP2012]借教室
    [学习笔记]递推问题选讲
    [vijos1779][NOIP2012]国王游戏
    NET中使用三层构架如何从DAL层读取web.config中的数据库连接字符串!
    转:一个不错的网页进度条
    转:在没有数据时,如何使用FormView增加数据
    asp.net 2.0中的MessageBox.Show()方法
    TreeView与MultiView,View三个控件的组合使用
  • 原文地址:https://www.cnblogs.com/icoolno1/p/946733.html
Copyright © 2011-2022 走看看