zoukankan      html  css  js  c++  java
  • NHibernate实例

     

    1. 下载相关资源:

    2. 下载NHibernate后解压缩文件,看到如下文档结构。本示例会用到Required_Bins目录下的文件。

    • 下载微软Northwind,打开SQL Server 直接运行instnwnd.sql文件的脚本就可以了。

    3. 打开Visual Studio 2008。新建NHibernate.Sample解决方案。

    4. 在新建的解决方案下创建如下新项目:

    • NHibernate.Sample.Business  【模板:类库】;处理业务逻辑
    • NHibernate.Sample.Data  【模板:类库】;处理数据访问
    • NHibernate.Sample.Lib  【模板:类库】;存放外部资源
    • NHibernate.Sample.Model  【模板:类库】;处理业务模型
    • NHibernate.Sample.Output  【模板:控制台应用程序】;测试输出

    创建好以后,解决方案目录如下:

    5. NHibernate.Sample.Lib项目,用来统一存放本示例用到的所有外部资源。创建三个个文件夹,分别为Dll、Schema、DBScript;分别用来存放NHibernate相关Dll文件、Schema文件和示例用到的数据库脚本文件。下面需要把相应的文件拷贝到对应的文件夹下。【这一步可以做,也可以不做。一般在真实的项目都会做,方便统一管理】。

    完成的NHibernate.Sample.Lib项目结构如下:

           

             instnwnd.sql文件来自下, 载微软Northwind示例数据库。第一步已经提供了下载地址。Iesi.Collections.dll、NHibernate.dll、nhibernate-configuration.xsd、nhibernate-mapping.xsd四个文件都来自下载的NHibernate,Required_Bins文件目录下。

    6. NHibernate.Sample.Model项目,用来创建模型,对应于数据库中的表。添加Customer类,添加Mapping文件夹。

    • 在Mapping文件夹下创建Customer.hbm.xml文件:

    • 创建好Customer.hbm.xml文件以后,在打开的编辑界面内,右键=》属性。
    • 打开属性管理窗口:

    • 在属性管理窗口的架构一项,选择架构文件。架构文件的地址,就是我们上一步已经拷贝到NHibernate.Sample.Lib项目中的nhibernate-mapping.xsd文件。添加好以后编辑Customer.hbm.xml文件,就更够通过Visual Studio智能所用到的配置项。

    • 在解决方案管理器中找到Customer.hbm.xml文件,右键=》属性

    • 把“生成操作”属性改为:嵌入的资源。

    • 完成Customer.hbm.xml文件内容:【注意:assembly和namespace属性】
    复制代码
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"  assembly="NHibernate.Sample.Model" namespace="NHibernate.Sample.Model">
      <class name="Customer" table="Customers" lazy="true">
        <id name="CustomerID" column="CustomerID" type="string"/>
        <property name="CompanyName" type="string">
          <column name="CompanyName" length="40"/>
        </property>
        <property name="ContactName" type="string">
          <column name="ContactName" length="30"/>
        </property>
        <property name="ContactTitle" type="string">
          <column name="ContactTitle" length="30"/>
        </property>
        <property name="Address" type="string">
          <column name="Address" length="60"/>
        </property>
        <property name="City" type="string">
          <column name="City" length="15"/>
        </property>
        <property name="Region" type="string">
          <column name="Region" length="15"/>
        </property>
        <property name="PostalCode" type="string">
          <column name="PostalCode" length="10"/>
        </property>
        <property name="Country" type="string">
          <column name="Country" length="15"/>
        </property>
        <property name="Phone" type="string">
          <column name="Phone" length="24"/>
        </property>
        <property name="Fax" type="string">
          <column name="Fax" length="24"/>
        </property>
      </class>
    </hibernate-mapping>
    复制代码
    • 添加Customer.cs文件,完成Customer类:
    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace NHibernate.Sample.Model
    {
        public class Customer
        {
            /// <summary>
            /// 
            /// </summary>
            public virtual string CustomerID { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public virtual string CompanyName { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public virtual string ContactName { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public virtual string ContactTitle { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public virtual string Address { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public virtual string City { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public virtual string Region { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public virtual string PostalCode { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public virtual string Country { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public virtual string Phone { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public virtual string Fax { get; set; }
        }
    }
    复制代码
    • 创建好以后NHibernate.Sample.Model项目的目录结构如下:

    7. NHibernate.Sample.Data项目,用来数据访问。创建文件夹Config,用来存放配置文件,创建数据访问基类,创建数据访问接口,创建数据访问类。

    • 创建NHiberane的配置文件hibernate.cfg.xml:

    • 设定hibernate.cfg.xml文件的框架,在文件的编辑窗口右键=》属性=》添加=》选择Schema文件(NHibernate.Sample.Lib项目中的nhibernate-configuration.xsd文件)。

    • 完成hibernate.cfg.xml文件的内容:
    复制代码
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
      <session-factory>
        <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
        <property name="connection.connection_string_name">Connection String</property>
        <property name="connection.isolation">ReadCommitted</property>
        <property name="show_sql">false</property>
        <mapping assembly="NHibernate.Sample.Model"/>
      </session-factory>
    </hibernate-configuration>
    复制代码
    • 添加BaseOperator.cs文件,完成BaseOperator类:
    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using NHibernate;
    using NHibernate.Cfg;
    
    namespace NHibernate.Sample.Data
    {
        public class BaseOperator
        {
            private ISession m_Session;
    
            public ISession Session
            {
                get { return m_Session;}
            }
    
            private ISessionFactory m_SessionFactory;
    
            public BaseOperator()
            {
                var config = new Configuration().Configure("Config/hibernate.cfg.xml");
                m_SessionFactory = config.BuildSessionFactory();
                m_Session = m_SessionFactory.OpenSession(); 
            }
        }
    }
    复制代码
    • 添加CustomerOperator.cs文件,完成CustomerOperator类:
    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using NHibernate.Linq;
    using NHibernate.Sample.Model;
    
    namespace NHibernate.Sample.Data
    {
        public class CustomerOperator : BaseOperator
        {
    
            public object Save(Customer customer)
            {
                var id = Session.Save(customer);
                Session.Flush();
                    return id;
            }
    
            public void Update(Customer customer)
            {
                Session.Update(customer);
                Session.Flush();
            }
    
            public void Delete(Customer customer)
            {
                Session.Delete(customer);
                Session.Flush();
            }
    
            public Customer Get(object id)
            {
                return Session.Get<Customer>(id);
            }
    
            public IList<Customer> GetAll()
            {
                return Session.Query<Customer>().ToList();
            }
    
        }
    }
    复制代码
    • 完成后的NHibernate.Sample.Data目录结构如下:

    8. NHibernate.Sample.Business项目用来,处理业务逻辑;本示例比较简单,我们只添加一个逻辑处理类CustomerLogic,内容如下:

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using NHibernate.Sample.Data;
    using NHibernate.Sample.Model;
    
    namespace NHibernate.Sample.Business
    {
        public class CustomerLogic
        {
            public IList<Customer> GetAll()
            {
                CustomerOperator oper = new CustomerOperator();
                return oper.GetAll();
            }
        }
    }
    复制代码
    • 完成以后项目结构如下:

    9. NHibernate.Sample.Output为控制台项目,用来测试输出。添加一个配置文件App.config用于连接数据库,内容视个人环境而定。

    App.config内容如下:

    复制代码
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <connectionStrings>
        <add name="Connection String" connectionString="Data Source=.SQLExpress;Initial Catalog=Northwind;Integrated Security=SSPI;" />
      </connectionStrings>
    </configuration>
    复制代码
    • Program文件内容如下:
    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using NHibernate.Sample.Business;
    using NHibernate.Sample.Model;
    
    namespace NHibernate.Sample.Output
    {
        class Program
        {
            static void Main(string[] args)
            {
                GetAll();
            }
    
            private static void GetAll()
            {
                CustomerLogic logic = new CustomerLogic();
                IList<Customer> cList = logic.GetAll();
    
                foreach (Customer item in cList)
                {
                    Console.WriteLine(item.CustomerID.ToString());
                }
                Console.Read();
            }
        }
    }
    复制代码
    • NHibernate.Sample.Output为控制台项目下,E:StudyNHibernate.SampleNHibernate.Sample.OutputinDebug应包含如下文件。否则无法运行成功;如果缺少去其他项目中拷贝一份过来就可以了。

    10. 运行结果如下:

    11. 【代码下载

  • 相关阅读:
    AngularJs用户登录的一些处理
    百度地图api-查询周边
    Git常用命令整理
    AngularJs控制器运行前方法,操控导航栏隐藏
    AngularJs中,如何在数据加载完成后,执行Js脚本
    ZZ:Linux的chattr与lsattr命令详解
    ZZ:实战 SSH 端口转发
    Python 删除 恢复 Redshift
    [原创]Python 命令 恢复 删除 RDS
    AWS CLI 命令学习 之 bat 控制EC2 启停
  • 原文地址:https://www.cnblogs.com/armyfai/p/3545346.html
Copyright © 2011-2022 走看看