第一步:創建資料庫 第二步:去官網下載:http://nhibernate.info/ nhibernate 第三步:創建一個vs項目 第四步:添加nhibernate的類庫 第五步:添加和資料庫中類型相對應的類 using System;using System.Collections.Gener ...
第一步:創建資料庫
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 } }
第一次寫博客,如果有知識點沒有說明白,請見諒