NHibernate

项目结构图。

技术分享

 

首先引用程序集,在lib文件夹下的程序集事都要用到的,之后在引用中引用它们。

 

 

 

 

 

 

然后是App.config配置文件:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 
 3 <!--暂时只能有这么多代码-->
 4 <configuration>
 5 
 6   <configSections>
 7     <section name ="hibernate-configuration" type ="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" requirePermission="false"/>
 8   </configSections>
 9 
10   <hibernate-configuration  xmlns ="urn:nhibernate-configuration-2.2">
11     <session-factory>
12       <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider, NHibernate</property>
13       <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
14       <property name="connection.connection_string">Server=HUO-PC\SQLEXPRESS;initial catalog=NHibernate;Integrated Security=SSPI</property>
15       <property name="adonet.batch_size">10</property>
16       <property name="show_sql">true</property> <!--是不是显示SQL语句-->
17       <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
18       <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
19     </session-factory>
20   </hibernate-configuration>
21   
22 </configuration>

 

如果是用App.config文件那么,在Load加载时间中的代码应该是这样写:

1             //读取配置文件
2             //读取所有映射文件
3             Configuration config = new Configuration().AddAssembly("Test");

 

 

 

 

 

 

 

如果是使用Nhibernate.cfg.xml文件,那么代码应该这样写:

技术分享

1             //读取配置文件
2             //读取所有映射文件
3             //如果使用这种方法,那么要在项目中添加 NHibernate.cfg.xml 文件
4             //如果是放在项目中的文件夹中,那么前面要加上文件夹的名称,比如 @"Config/NHibernate.cfg.xml"
5             Configuration config = new Configuration().Configure(@"Config/NHibernate.cfg.xml");

 

 

 

 

 

 

 

 

运行Form1窗口:

技术分享

 

 

主要代码:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9 using System.Windows.Forms;
 10 
 11 //引入对应命名空间
 12 using NHibernate;
 13 using NHibernate.Cfg;
 14 using Test;
 15 
 16 namespace WinFormTest
 17 {
 18     public partial class Form1 : Form
 19     {
 20         ISession session = null;
 21         ISessionFactory factory = null;
 22         ITransaction trans = null;
 23 
 24         public Form1()
 25         {
 26             InitializeComponent();
 27         }
 28 
 29         /// <summary>
 30         /// 窗体加载事件
 31         /// </summary>
 32         private void Form1_Load(object sender, EventArgs e)
 33         {
 34             //读取配置文件
 35             //读取所有映射文件
 36             Configuration config = new Configuration().AddAssembly("Test");
 37             
 38             //创建Session工厂,负责持久化的连接以及OR映射
 39             factory = config.BuildSessionFactory();
 40 
 41             //创建一个可用于用户级别的操作对象。
 42             session = factory.OpenSession();
 43         }
 44 
 45         /// <summary>
 46         /// 添加事件
 47         /// </summary>
 48         private void btn_Insert_Click(object sender, EventArgs e)
 49         {
 50             //开启事务对象
 51             trans = session.BeginTransaction();
 52 
 53             try
 54             {
 55                 Person p = new Person();
 56                 p.Name = this.txt_Name.Text.Trim();
 57 
 58                 //将对象保存到数据库
 59                 //将对象P必须转换成数据库能识别的SQL语句
 60                 //由于IsessionFactory已经保存了所有的OR映射关系
 61                 //Isession能根据相对应的方言来实现SQL语句
 62                 session.Save(p);
 63 
 64                 trans.Commit();
 65 
 66                 MessageBox.Show("添加成功!", "提示");
 67             }
 68             catch (Exception)
 69             {
 70                 trans.Rollback();
 71             }
 72         }
 73 
 74         /// <summary>
 75         /// 删除事件
 76         /// </summary>
 77         private void btn_Delete_Click(object sender, EventArgs e)
 78         {
 79             //开启事务
 80             trans = session.BeginTransaction();
 81 
 82             try
 83             {
 84                 //获取要删除的对象
 85                 Person p = (Person)session.Get(typeof(Person), Convert.ToInt32(this.txt_ID.Text.Trim()));
 86 
 87                 session.Delete(p);
 88 
 89                 trans.Commit();
 90 
 91                 MessageBox.Show("删除成功!", "提示");
 92             }
 93             catch (Exception)
 94             {
 95                 trans.Rollback();
 96             }
 97         }
 98 
 99         /// <summary>
100         /// 修改事件
101         /// </summary>
102         private void btn_Update_Click(object sender, EventArgs e)
103         {
104             //开启事务对象
105             trans = session.BeginTransaction();
106 
107             try
108             {
109                 //获取要修改的对象
110                 Person p = (Person)session.Get(typeof(Person), Convert.ToInt32(this.txt_ID.Text.Trim()));
111 
112                 //更改对象的值
113                 p.Name = this.txt_Name.Text.Trim();
114 
115                 //把更改的数据,重新提交数据库,用以实现更新
116                 session.Save(p);
117 
118                 //提交事务
119                 trans.Commit();
120 
121                 MessageBox.Show("修改成功!", "提示");
122             }
123             catch (Exception)
124             {
125                 //如果出现错误,回滚事务
126                 trans.Rollback();
127             }
128         }
129 
130         /// <summary>
131         /// 查找事件
132         /// </summary>
133         private void btn_Select_Click(object sender, EventArgs e)
134         {
135             //不需要开启事务
136             Person p = (Person)session.Get(typeof(Person), Convert.ToInt32(this.txt_ID.Text.Trim()));
137 
138             this.txt_Name.Text = p.Name.ToString();
139         }
140     }
141 }



项目Demo:
使用App.config文件的:百度云,NHibernate文件夹-->NHibernateTest-App.config
使用NHibernate.cfg.xml文件的:百度云,NHibernate文件夹-->NHibernateTest- .cfg.xml

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。