亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

通俗易懂的Nhibernate教程(1)-----基本操作,映射,CURD

2019-11-14 15:51:29
字體:
來源:轉載
供稿:網友

網站架構:

1.圖片

image_thumb3

2.說明

Data  -----------------------   類庫項目,數據訪問層,由Nhibernate提供數據相關操作

Mapping -------------------    類庫項目,映射文件都在這個項目中

Model   --------------------    類型項目,實體層

XShop  --------------------     Mvc項目,UI層

 

步驟:

1.安裝Nhibernate

2.配置Nhibernate

3.創建實體類

4.編寫映射文件

5.創建數據庫/表

6.CURD操作

7.測試

 

 

第一步:安裝Nhibernate,這一步就不用說了,使用Nuget安裝,看圖

 

image_thumb11

 

 

第二步:配置Nhibernate

2.1 這一步主要是一些系統級的配置,如:連接字符串,數據庫驅動,數據庫方言等

2.2 創建 hibernate.cfg.xml文件(XShop項目中)

<?xml version="1.0" encoding="utf-8" ?><hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">  <!--Nhibernate對數據庫操作是基于Isession(會話),可以理解為SqlConnection的封裝,可通過SessionFactory創建-->  <session-factory name="XShop">    <!--連接提供程序-->    <PRoperty name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>        <!--連接字符串-->    <property name="connection.connection_string">      Server=.;initial catalog=XShopDb;Integrated Security=SSPI    </property>        <!--Nhibernate是一個支持多個數據庫的Orm框架,然而幾乎每個數據庫產品都對Sql的實現都有所不同-->    <!--Nhibernate通過dialect(方言)消除數據庫之間的差異-->    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>        <!--是否在調試的時候打印Sql語句-->    <property name="show_sql">true</property>        <!--映射文件所在的程序集-->    <mapping assembly="Mapping"/>  </session-factory></hibernate-configuration>

溫馨提示:如果發現在編寫xml文件的時候發現沒有智能提示,請把Nhibernate包的xsd文件復制到Vs安裝目錄中(參考百度)

注意:Nhibernate配置文件的文件名必須為 hibernate.cfg.xml ,不可隨意更改

 

第三步:創建實體類 Customer(Model項目)

3.1 代碼

namespace Model{    public class Customer    {        public virtual int Id { get; set; }        public virtual string Name { get; set; }        public virtual string UserName { get; set; }        public virtual string PassWord { get; set; }        public virtual DateTime CreateTime { get; set; }    }}

注意:實體類的屬性必須是virtual,否則Nhibernate會報錯.why?因為這樣Nhibernate就可以重寫這些屬性的訪問邏輯,比如 延遲加載..

 

第四步:創建 Customer.hbm.xml 映射文件(Mapping項目)

4.1 代碼:

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" auto-import="true" default-cascade="all" default-lazy="true" namespace="Model">  <!--<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="實體類所在的程序集" auto-import="是否自動導入命名空間,如果否,下面類名應該寫類的全名"  default-cascade="默認的級聯操作" default-lazy="是否延遲加載" namespace="實體類所在的命名空間">-->    <!--<class name="類型名/類型全名" table="對應的表名" >-->  <class name="Customer" table="Customer" >        <!--id是必須的-->    <!--<id name="Id的屬性名" column="列名" type="數據類型" unsaved-value="未被持久化到數據庫時,id的值" generator="id的生成策略"></id>-->    <id name="Id" column="CustomerId" type="int" unsaved-value="0" generator="native"></id>        <!--<property name="屬性名" column="對應的列名" length="長度" type="數據類型" not-null="是否不可空"></property>-->    <property name="Name" column="Name" length="20" type="string" not-null="true"></property>    <property name="UserName">      <column  name="UserName" sql-type="nvarchar" not-null="true" length="20"></column>    </property>        <property name="Password" length="32" column="Password" not-null="true" type="string"></property>    <property name="CreateTime" column="CreateTime" type="datetime" not-null="true"></property>  </class></hibernate-mapping>

注意:

1.映射文件命名規則:  類名.hbm.xml  ,不可隨意更改

2.映射文件的生成策略必須為:嵌入到程序集

 

第五步:創建數據庫和表

5.1 創建數據庫

CREATE DATABASE XShopDbGO

 

5.2  創建表

   5.2.1創建表的兩種方式--手動創建

    注意:創建的表結構應該與映射文件一樣

    5.2.1創建表的兩種方式--使用SchemaExport生成的Sql

    代碼:可以創建一個控制臺項目或Winform項目跑下面這段代碼

NHibernate.Cfg.Configuration configuration = new NHibernate.Cfg.Configuration().Configure();NHibernate.Tool.hbm2ddl.SchemaExport schemaExport = new NHibernate.Tool.hbm2ddl.SchemaExport(configuration);//打印Sql腳本,但不執行 schemaExport.Create(true, false); //導出到文件//schemaExport.SetOutputFile(@"c:/schma.sql");

       結果:

        image_thumb5

 

 

第六步:CURD操作(Data項目)

6.1 上面我們提過,所有數據庫操作都是通過ISession對象操作,而ISession可以通過ISessionFactory創建

-----創建HbmHelper類--獲取ISessionFactory

namespace Data{    public class HbmHelper    {        private static ISessionFactory _sessionFactory;        public static ISessionFactory CurrentSessionFactory        {            get            {                if (_sessionFactory == null)                {                    //創建SessionFactory                    _sessionFactory = new Configuration().Configure().BuildSessionFactory();                 }                return _sessionFactory;            }        }    }}

 

-------從ISessionFactory中創建session

private ISession _session = HbmHelper.CurrentSessionFactory.OpenSession();

 

------添加數據訪問基類 BaseDal<T>

namespace Data{    /// <summary>    /// 數據訪問基類    /// </summary>    /// <typeparam name="T"></typeparam>    public class BaseDal<T> where T : class    {        //從ISessionFactory中創建session        private ISession _session = HbmHelper.CurrentSessionFactory.OpenSession();        #region ------------------   CURD    ----------------        /// <summary>        /// 添加數據        /// </summary>        /// <param name="model"></param>        public int Insert(T model)        {           int id=(int) _session.Save(model);            _session.Flush();            return id;        }        /// <summary>        /// 更新        /// </summary>        /// <param name="model"></param>        public void Update(T model)        {            //使用事務            using (ITransaction ts = _session.BeginTransaction())            {                try                {                    _session.Update(model);                    _session.Flush();                    ts.Commit();                }                catch (Exception)                {                    ts.Rollback();                    throw;                }            }        }        /// <summary>        /// 刪除        /// </summary>        /// <param name="model"></param>        public void Delete(T model)        {            _session.Delete(model);            _session.Flush();        }        /// <summary>        /// 查詢        /// </summary>        /// <param name="id"></param>        /// <returns></returns>        public T Query(int id)        {            return _session.Get<T>(id);        }                #endregion    }}

 

第七步:添加數據,測試

7.1 添加數據

image_thumb1

7.2 創建單元測試項目,添加測試類:

namespace DataTest{    [TestClass]    public class BaseDalTest    {        private BaseDal<Customer> _customerDal = new BaseDal<Customer>();        [TestMethod]        public void GetTest()        {            var result = _customerDal.Query(1);            Assert.AreEqual(result.Name, "張小軍");        }        [TestMethod]        public void InsertTest()        {            Customer customer = new Customer()            {                Name = "張三",                Password = "654321",                UserName = "zhs"            };            int id = _customerDal.Insert(customer);            var result = _customerDal.Query(id);            Assert.AreEqual(customer.UserName, result.UserName);        }        [TestMethod]        public void UpdateTest()        {            var result = _customerDal.Query(1);            result.Name = "王五";            _customerDal.Update(result);            var r2 = _customerDal.Query(1);            Assert.AreEqual(result.Name,r2.Name);        }        [TestMethod]        public void DelTest()        {            var result = _customerDal.Query(1);            _customerDal.Delete(result);            var r2 = _customerDal.Query(1);            Assert.IsNotNull(r2);        }    }}

 

代碼:http://files.VEVb.com/files/zhxj/XShop0822.zip

原創文章,轉載請注明出處:http://www.49028c.com/zhxj/      

 

 

2015.08.22 --張小軍


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文.日本.精品| 日韩av一卡二卡| 国产精品国模在线| 亚洲最大av在线| 91精品国产乱码久久久久久蜜臀| 日产精品久久久一区二区福利| 亚洲国产日韩欧美在线图片| 成人福利网站在线观看11| 日韩欧美在线视频日韩欧美在线视频| 日韩在线高清视频| 中文字幕不卡av| 国产精品白丝jk喷水视频一区| 久久免费在线观看| 成人黄色在线免费| 欧美国产第二页| 国产精品视频xxx| 深夜精品寂寞黄网站在线观看| 在线免费观看羞羞视频一区二区| 成人乱人伦精品视频在线观看| 91精品国产网站| 亚洲午夜未满十八勿入免费观看全集| 亚洲福利在线观看| 亚洲综合日韩中文字幕v在线| 欧美精品久久久久| 亚洲综合小说区| 国内成人精品视频| 久久躁日日躁aaaaxxxx| 91国语精品自产拍在线观看性色| 久久天天躁狠狠躁老女人| 国产精品观看在线亚洲人成网| 日韩人体视频一二区| 亚洲精品欧美极品| 欧美激情小视频| 欧美黄色性视频| 国产精品久久久久久久电影| 96sao精品视频在线观看| 久久夜精品va视频免费观看| 国产成人一区二区在线| 国产精品免费视频久久久| 法国裸体一区二区| 欧美综合激情网| 精品视频在线观看日韩| www国产精品com| 国产精品一区专区欧美日韩| 色系列之999| 中文字幕日韩精品在线观看| 精品美女永久免费视频| 亚洲欧美一区二区三区情侣bbw| 欧美精品18videos性欧| 欧美精品福利视频| 国产精品久久久久一区二区| 国产精品国模在线| 91在线视频一区| 青草青草久热精品视频在线网站| www.日韩av.com| 国产精品久久久久久久久免费| 91av在线播放视频| 日韩欧美在线国产| 久久久精品一区| 日韩成人中文电影| 欧美疯狂性受xxxxx另类| 国产精品美乳在线观看| 91精品国产777在线观看| 亚洲午夜未满十八勿入免费观看全集| 久久久久久国产精品久久| 好吊成人免视频| 亚洲综合日韩中文字幕v在线| 中文字幕精品在线视频| 26uuu亚洲伊人春色| 欧美性猛交xxxx富婆| 国产999精品久久久| 亚洲国产欧美精品| 久久综合色88| 91影视免费在线观看| 日韩av手机在线观看| 欧洲成人在线视频| 成人网在线观看| 久久久999国产精品| 亚洲男人天堂2023| 亚洲精品suv精品一区二区| 亚洲精品永久免费| 国产亚洲欧美视频| 午夜免费久久久久| 久久久久久久久中文字幕| 亚洲久久久久久久久久| 九九久久综合网站| 中文字幕国内精品| 秋霞成人午夜鲁丝一区二区三区| 最新中文字幕亚洲| 久久人人爽亚洲精品天堂| 国产精品成人一区| 精品国产一区二区三区久久| 中文字幕日本精品| 91伊人影院在线播放| 久久国产色av| 97热精品视频官网| www.日韩av.com| 久久久国产精品一区| 秋霞成人午夜鲁丝一区二区三区| 欧美专区国产专区| www.99久久热国产日韩欧美.com| 久久久久久免费精品| 一本一本久久a久久精品牛牛影视| 久久久久久久久电影| 欧美一级视频在线观看| 亚洲精品久久久久久久久| 久99久在线视频| 日韩电影大全免费观看2023年上| 亚洲欧美在线看| 欧美精品亚州精品| 色爱av美腿丝袜综合粉嫩av| 成年无码av片在线| 亚洲欧美日韩一区二区三区在线| www国产91| 琪琪亚洲精品午夜在线| 日本人成精品视频在线| 国产在线观看精品一区二区三区| 97精品国产91久久久久久| 精品福利免费观看| 久久精品国产清自在天天线| 日韩av资源在线播放| 久久久成人av| 亚洲性日韩精品一区二区| 国产免费一区视频观看免费| 日韩精品极品在线观看播放免费视频| 国产精品一区=区| 欧美俄罗斯性视频| 亚洲第一区中文99精品| 久久久www成人免费精品| 美女久久久久久久| 亚洲精品久久久久久久久久久| 国产精品h在线观看| 欧美精品videos| 尤物九九久久国产精品的分类| 午夜精品久久久久久久99黑人| 国产亚洲精品高潮| 欧美性xxxxhd| 懂色av影视一区二区三区| 亚洲一区二区黄| 2019av中文字幕| 亚洲最大的成人网| 欧美日韩精品在线视频| 91色中文字幕| 亚洲天堂男人天堂女人天堂| 日韩在线观看免费av| 亚洲精品美女视频| 久久久av网站| 亚洲午夜小视频| 亚洲 日韩 国产第一| 国产日韩中文在线| 亚洲精品永久免费精品| 国产一区二区三区高清在线观看| 91中文精品字幕在线视频| 国产日韩在线亚洲字幕中文| 91精品视频观看| 国产精品久久99久久| 中文字幕亚洲无线码在线一区| 欧美另类精品xxxx孕妇| 国产精品久久久久久久久久小说| 日本精品视频在线播放| 欧美一级成年大片在线观看| 国产做受高潮69| 久久这里只有精品99| 亚洲乱码av中文一区二区|