第一步:创建数据库
create table Emp( EmpId int primary key identity, EmpName varchar(50), EmpDate date )
第二步:去官网下载:http://nhibernate.info/ nhibernate
第三步:创建一个vs项目
第四步:添加nhibernate的类库
第五步:添加和数据库中类型相对应的类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NhibernateDemoApp
{
public class Emp
{
public virtual int EmpId { get; set; }
public virtual string EmpName { get; set; }
public virtual DateTime EmpDate { get; set; }
}
}
第六步:创建emp.hbl.xml文件
第七步:添加智能提示
第七步:将xml设置为内嵌的
写xml的代码
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NhibernateDemoApp" namespace="NhibernateDemoApp"> <class name="Emp" table="Emp"> <id name="EmpId"> <generator class="native"/> </id> <property name="EmpName"></property> <property name="EmpDate"></property> </class> </hibernate-mapping>
- 注意hibernate-mapping的assembly、namespace属性要填写正确
- class的name属性表示类名,table是映射的表名,如果类名称和表名称相同,可以省略table属性
- property的name属性是类的属性名,如果类属性名和表的列名相同,可以省略column属性
- property的type属性表示.net类属性映射的NHibernate数据类型。如果是int、bool、double这样的.net基础数据类型,则可以省略
- property的type属性如果是DateTime、string,也可以省略
- property的not-null属性对应关系表的列的nullable属性,默认值是false。因此,如果允许为空,则可以省略
- id表示主键,name为主键名,<generator class="native"/>表示数据表的主键按简单Identity的自增算法生成新记录主键值(NHibernate提供了多种主键值生成算法,这里只用最简单的Identity算法)
- 文件名必须以.hbm.xml结尾
下载开始写正式的增删查改的代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NHibernate; using NHibernate.Cfg; using NHibernate.Dialect; using NHibernate.Driver; using System.Reflection; namespace NhibernateDemoApp { class Program { private static ISessionFactory _sessionFactory; public static ISessionFactory SessionFactory { get { if (_sessionFactory == null) { var cfg = new Configuration(); cfg.DataBaseIntegration(x => { x.ConnectionString = "Data Source=localhost;Initial Catalog=NHibernateDemoDB;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; x.Driver<SqlClientDriver>(); x.Dialect<MsSql2008Dialect>(); }); //告诉nhibernate加载xml的地方 cfg.AddAssembly(Assembly.GetExecutingAssembly()); //构建nhibernate _sessionFactory = cfg.BuildSessionFactory(); } return _sessionFactory; } } static void Main(string[] args) { IList<Emp> emps = GetAll(); foreach (var item in emps) { Console.WriteLine(item.EmpName); } Console.ReadKey(); } #region crud public static int Insert(Emp emp) { using(var session = SessionFactory.OpenSession()) { var i= session.Save(emp); session.Flush();//相当于savechange return Convert.ToInt32(i); } } public static void Delete(int id) { using(var session = SessionFactory.OpenSession()) { var entity= session.Load<Emp>(id); session.Delete(entity); session.Flush(); } } public static void Update(Emp emp) { using(var session = SessionFactory.OpenSession()) { session.SaveOrUpdate(emp); session.Flush(); } } public static Emp GetEmpById(int id) { using(var session = SessionFactory.OpenSession()) { Emp emp = session.Get<Emp>(id); return emp; } } public static IList<Emp> GetAll() { using(var session = SessionFactory.OpenSession()) { IList<Emp> emps = session.CreateCriteria<Emp>().List<Emp>(); return emps; } } #endregion } }
第一次写博客,如果有知识点没有说明白,请见谅