项目结构图。
首先引用程序集,在lib文件夹下的程序集事都要用到的,之后在引用中引用它们。
然后是App.config配置文件:
1 2 3 45 6 7 8 9 1011 21 2212 20NHibernate.Connection.DriverConnectionProvider, NHibernate 13NHibernate.Driver.SqlClientDriver 14Server=HUO-PC\SQLEXPRESS;initial catalog=NHibernate;Integrated Security=SSPI 1510 16true 17NHibernate.Dialect.MsSql2008Dialect 18NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu 19
如果是用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 ///30 /// 窗体加载事件 31 /// 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 ///46 /// 添加事件 47 /// 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 ///75 /// 删除事件 76 /// 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 ///100 /// 修改事件101 /// 102 private void btn_Update_Click(object sender, EventArgs e)103 {104 //开启事务对象105 trans = session.BeginTransaction();106 107 try108 {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 ///131 /// 查找事件132 /// 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