整个项目的结构图如下:
1、开发工具Microsoft Visual Studio2010、SQL Server2012
2、NHibernate版本为3.3.1
3、新建类库GaoJie.Domain,在该类库项目下新建两个文件夹Domain和Mapping。
编写Student类,该类在Domain文件夹下。代码如下:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace GaoJie.Domain.Domain 7 { 8 /// <summary> 9 /// Student 10 /// </summary> 11 public class Student 12 { 13 /// <summary> 14 /// Id 15 /// </summary> 16 public virtual Guid Id { set; get; } 17 18 /// <summary> 19 /// Name 20 /// </summary> 21 public virtual string Name { set; get; } 22 23 /// <summary> 24 /// Age 25 /// </summary> 26 public virtual int Age { set; get; } 27 } 28 }
编写映射文件Student.hbm.xml,将该文件的属性设置为,如图所示:
代码如下:

1 <?xml version="1.0" encoding="utf-8" ?> 2 3 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="GaoJie.Domain" namespace="GaoJie.Domain.Domain"> 4 5 <class name="Student" table="T_Student" lazy="true"> 6 7 <id name="Id" column="ID" type="Guid"> 8 <generator class="assigned"/> 9 </id> 10 11 <property name="Name" type="string"> 12 <column name="Name" length="50"/> 13 </property> 14 15 <property name="Age" type="int"> 16 <column name="Age"/> 17 </property> 18 19 </class> 20 21 </hibernate-mapping>
4、新建类库GaoJie.Lib,新建文件夹lib,里面有如下文件Iesi.Collections.dll、
NHibernate.dll、nunit.framework.dll
5、新建类库GaoJie.Dao,添加StudentDao类和IStudentDao接口。
StudentDao代码如下:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using GaoJie.Domain.Domain; 6 using NHibernate; 7 using NHibernate.Cfg; 8 using NHibernate.Linq; 9 10 namespace GaoJie.Dao 11 { 12 public class StudentDao:IStudentDao 13 { 14 #region fields 15 private ISession session; 16 private ISessionFactory sessionFactory; 17 #endregion 18 19 #region Constructor 20 public StudentDao() 21 { 22 var cfg = new Configuration().Configure("Config/hibernate.cfg.xml"); 23 24 using (sessionFactory = cfg.BuildSessionFactory()) 25 { 26 } 27 } 28 #endregion 29 30 #region Method 31 32 33 public object Save(Student student) 34 { 35 using (session = sessionFactory.OpenSession()) 36 { 37 var id=session.Save(student); 38 session.Flush(); 39 return id; 40 } 41 } 42 43 public void Update(Student student) 44 { 45 using (session = sessionFactory.OpenSession()) 46 { 47 session.Update(student); 48 session.Flush(); 49 } 50 } 51 52 public void Delete(Student student) 53 { 54 using (session = sessionFactory.OpenSession()) 55 { 56 session.Delete(student); 57 session.Flush(); 58 } 59 } 60 61 public Student Get(object id) 62 { 63 using (session = sessionFactory.OpenSession()) 64 { 65 return session.Get<Student>(id); 66 } 67 } 68 69 public IList<Student> GetAll() 70 { 71 using (session=sessionFactory.OpenSession()) 72 { 73 return session.Query<Student>().ToList(); 74 } 75 } 76 77 private bool IsSessionOpen() 78 { 79 bool isSessionOpen = false; 80 81 if (!session.IsOpen) 82 { 83 session = sessionFactory.OpenSession(); 84 isSessionOpen = true; 85 } 86 87 return isSessionOpen; 88 } 89 #endregion 90 } 91 }
IStudentDao代码如下:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using GaoJie.Domain.Domain; 6 7 namespace GaoJie.Dao 8 { 9 public interface IStudentDao 10 { 11 object Save(Student student); 12 13 void Update(Student student); 14 15 void Delete(Student student); 16 17 Student Get(object id); 18 19 IList<Student> GetAll(); 20 } 21 }
编写hibernate.cfg.xml:该文件在GaoJie.Dao类库下的Config文件夹下,设置该文件的属性,如图所示:
代码如下:

1 <?xml version="1.0" encoding="utf-8"?> 2 3 <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" > 4 5 <session-factory name="GaoJie.NHibernate.Domain"> 6 <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 7 <property name="connection.connection_string"> 8 Server=(local);initial catalog=NHibernateDemo;Integrated Security=SSPI 9 </property> 10 <property name="adonet.batch_size">10</property> 11 <property name="show_sql">true</property> 12 <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> 13 <property name="command_timeout">60</property> 14 <property name="hbm2ddl.auto">update</property> 15 <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property> 16 <mapping assembly="GaoJie.Domain"/> 17 </session-factory> 18 19 </hibernate-configuration>
6、新建类库GaoJie.Test,添加引用
Iesi.Collections.dll、
NHibernate.dll、nunit.framework.dll
新建StudentTest类,编写代码:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using GaoJie.Domain.Domain; 6 using NHibernate; 7 using NHibernate.Cfg; 8 using NUnit.Framework; 9 using GaoJie.Dao; 10 using GaoJie.Domain; 11 12 13 namespace GaoJie.Test 14 { 15 [TestFixture] 16 public class StudentTest 17 { 18 private IStudentDao studentDao; 19 20 [SetUp] 21 public void Init() 22 { 23 studentDao=new StudentDao(); 24 } 25 26 [Test] 27 public void Save() 28 { 29 Student student=new Student() 30 { 31 Id =Guid.NewGuid(), 32 Name = "张三", 33 Age = 22 34 }; 35 36 var id = studentDao.Save(student); 37 38 Assert.NotNull(id); 39 } 40 41 [Test] 42 public void Update() 43 { 44 int expected = 0; 45 var student = studentDao.GetAll().FirstOrDefault(); 46 47 Assert.NotNull(student); 48 49 student.Age = 43; 50 expected = student.Age; 51 52 studentDao.Update(student); 53 54 Assert.AreEqual(expected,student.Age); 55 } 56 57 [Test] 58 public void Delete() 59 { 60 var student = studentDao.GetAll().FirstOrDefault(); 61 var id = student.Id; 62 Assert.NotNull(student); 63 64 studentDao.Delete(student); 65 Assert.Null(studentDao.Get(id)); 66 } 67 68 [Test] 69 public void Get() 70 { 71 var student = studentDao.GetAll().FirstOrDefault(); 72 Assert.NotNull(student); 73 74 student=studentDao.Get(student.Id); 75 Assert.NotNull(student); 76 } 77 78 [Test] 79 public void GetAll() 80 { 81 var student = studentDao.GetAll().Count; 82 Assert.NotNull(student>0); 83 } 84 } 85 }
分类:
NHibernate
标签:
NHibernate
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述