1. 程式人生 > >Nhibernate入門篇連線Sqlserver的增刪查改

Nhibernate入門篇連線Sqlserver的增刪查改

 

第一步:建立資料庫

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
    }
}

第一次寫部落格,如果有知識點沒有說明白,請見諒