Nhibernate入門篇連線Sqlserver的增刪查改
阿新 • • 發佈:2018-12-19
第一步:建立資料庫
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 } }
第一次寫部落格,如果有知識點沒有說明白,請見諒