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

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

NHibernate3快速上手教程FluentNHibernate配置與DBHelper

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

很多學習NHibernate的新手很容易卡在配置文件這一關,正所謂萬事開頭難,上手后再配合官方文檔就比較容易了。

網上關于配置文件的資料非常多,但由于版本的問題,許多老的教程中都沒有明確指出類庫的版本號,

另外許多人抱怨配置比較麻煩,本教程結合FluentNHibernate簡化配置,快速上手。

 

下載類庫、版本要求:

NHibernate 3 及以上

Iesi.Collections 1.0.1.0

FluentNHibernate 1.4.0.0

.NET Framework 3及以上

NH3已經將日志與動態代理的類庫集成了,所以只需要引入前兩個配置文件。

 

總體思路:

1、通過配置文件hibernate.cfg.xml配置數據庫連接;

2、配置文件注入到FluentNHibernate;

3、并添加實體模型的映射程序集到FluentNHibernate;

 

hibernate.cfg.xml:

數據庫Oracle10g配置文件,看到那段被注釋的英文了嗎?

大致意思就是其他數據庫可以參考NH包里面的數據庫名稱對應的配置文件,然后把文件名改成hibernate.cfg.xml,放在類庫的根目錄。

別忘了將配置文件復制到輸出目錄

 

<?xml version="1.0" encoding="utf-8"?><!-- This template was written to work with NHibernate.Test.Copy the template to your NHibernate.Test PRoject folder and rename it in hibernate.cfg.xml and change it for your own use before compile tests in VisualStudio.--><!-- This is the System.Data.OracleClient.dll provider for Oracle from MS --><hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >    <session-factory name="MyManager">        <property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>        <property name="connection.connection_string">      User ID=user;PassWord=pwd;Data Source=oracle    </property>        <property name="show_sql">true</property>    <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>        <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>    </session-factory>  </hibernate-configuration>


順手建立一個DBHelper類,或者叫SessionBuilder,直接復制一步到位。

    /*
* by:13yan
*/
public class SessionBuilder { private static ISessionFactory sessionFactory = null; private static object _lock = new object(); #region 初始化 生成SessionFactory,并配置上下文策略 public static void Instance(string currentSessionContextClass) { lock (_lock) { Configuration cfg = new Configuration() .Configure() .SetProperty("current_session_context_class", "web"); sessionFactory= Fluently.Configure(cfg) .Mappings(m => m.FluentMappings .AddFromAssembly(typeof(SessionBuilder).Assembly)) .BuildSessionFactory(); } } #endregion #region Session在當前上下文的操作 private static void BindContext() { lock (_lock) { if (!CurrentSessionContext.HasBind(sessionFactory)) { CurrentSessionContext.Bind(sessionFactory.OpenSession()); } } } private static void UnBindContext() { lock (_lock) { if (CurrentSessionContext.HasBind(sessionFactory)) { CurrentSessionContext.Unbind(sessionFactory); } } } public static void CloseCurrentSession() { UnBindContext(); } public static ISession GetCurrentSession() { BindContext(); return sessionFactory.GetCurrentSession(); } #endregion #region 關閉SessionFactory(一般在應用程序結束時操作) public static void CloseSessionFactory() { if (!sessionFactory.IsClosed) { sessionFactory.Close(); } } #endregion #region 打開一個新的Session public static ISession OpenSession() { lock (_lock) { return sessionFactory.OpenSession(); } } #endregion }

 

使用這個類需要在應用程序啟動時初始化,調用代碼:SessionBuilder.Instance("web");,一般添加在Global.asax

    public class Global : System.Web.Httpapplication    {        void Application_Start(object sender, EventArgs e)        {            // 在應用程序啟動時運行的代碼            SessionBuilder.Instance("web");        }    }

 

使用時可調用SessionBuilder.GetCurrentSession()獲取上下文中的Session,以便實現自動打開關閉Session,

也可以SessionBuilder.OpenSession()得到一個普通的Session。


代碼映射:

public class Department{        public virtual int ID { get; set; }        public virtual string Name { get; set; }}public class DepartmentMap:ClassMap<Department>{        public DepartmentMap()        {            Table("SYSDEPT");            Id(p => p.ID).GeneratedBy.Sequence("SEQ_SYSDEPT");            Map(p => p.Name);        } }

這個使用單實體的例子非常簡單,相信差不多夠上手了,

更加復雜的配置有一定的學習曲線,推薦邊學邊用,以前用低端一點的ORM不也單實體在用么,

NH的好處就在于簡單起來可以很簡單地用,完全上手后又擁有其他一般ORM無法滿足的功能。

 

映射的重點:

實體類與數據庫之間需要有一個映射,所以我們建立一個DepartmentMap映射類,它需要繼承FluentNHibernate.Mapping.ClassMap<T>泛型類。

Table("SYSDEPT") 對應數據庫表名;

Id映射主鍵,這里使用sequence,其他還有許多辦法,比如GUID、自增長等。

Map映射,屬性名與數據庫字段相同就不需要另外聲明了。

 

測試一下,看看我們是否成功了。

ISession session = SessionBuilder.GetCurrentSession();session.BeginTransaction();Department obj = session.Load<Department>(102);obj.Name = "新部門";session.SaveOrUpdate(obj);session.Transaction.Commit();


如果到這里已經能夠獲取到session了,那么恭喜你成功了,現在我們已經可以邊看官方文檔邊實戰了

如果你看不懂這段代碼,沒關系,可以邊看官方文檔邊練習了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产美女久久久久| 日韩中文字幕在线观看| 国产精品黄色影片导航在线观看| 久久精品在线播放| 成人免费福利视频| 久久好看免费视频| 国产精品视频免费观看www| 亚洲女人被黑人巨大进入al| 亚洲xxxx做受欧美| 日韩美女激情视频| 欧美一区二区三区艳史| 91精品在线国产| 亚洲成avwww人| 91精品在线看| 久久久久久久影视| 国产精品亚洲第一区| 日韩国产高清污视频在线观看| 欧美成在线视频| 奇米成人av国产一区二区三区| 欧美激情xxxx性bbbb| 亚洲成人网在线观看| 日韩精品视频在线观看网址| 91九色蝌蚪国产| 久久久久免费精品国产| 国产一区二区三区精品久久久| 97免费中文视频在线观看| 成人写真视频福利网| 久久亚洲精品毛片| 亚洲国产精品久久91精品| 久久国产天堂福利天堂| 国产精品久久久久久久久久| 色婷婷久久一区二区| 2019av中文字幕| 国产精品99导航| 92看片淫黄大片看国产片| 亚洲va欧美va国产综合久久| 国产精品91免费在线| 久久精品影视伊人网| 136fldh精品导航福利| 成人免费看吃奶视频网站| 国产91色在线|免| 亚洲自拍偷拍在线| 亚洲精品久久久久久下一站| 国产一区深夜福利| 欧美精品久久一区二区| 欧美激情乱人伦一区| 欧美精品久久一区二区| 久久伊人色综合| 久久久久这里只有精品| 欧美日韩国产成人| 亚洲国产精彩中文乱码av在线播放| 91精品免费久久久久久久久| 欧美精品videos另类日本| 亚洲色图25p| 九九精品在线观看| 国模视频一区二区三区| 国产精品网站大全| 亚洲品质视频自拍网| 中文字幕日韩欧美精品在线观看| 成人97在线观看视频| 69av视频在线播放| 中文字幕欧美视频在线| 国产精品无码专区在线观看| 亚洲国产精品久久久久秋霞不卡| 91精品国产综合久久久久久蜜臀| 国产精品自拍网| 日韩美女视频免费在线观看| 中文字幕av一区| 国产精品国语对白| 国产精品旅馆在线| 久久青草精品视频免费观看| 久久中文字幕在线视频| 国产精品福利小视频| 午夜伦理精品一区| 午夜精品美女自拍福到在线| 国产日韩综合一区二区性色av| 国内精品美女av在线播放| 亚洲 日韩 国产第一| 日韩精品在线视频观看| 欧美高清自拍一区| 久久久久国产精品www| 午夜精品免费视频| 日韩在线观看免费网站| 国产精品久久在线观看| 成人写真视频福利网| 欧美成人在线免费| 国产精品扒开腿做爽爽爽男男| 午夜精品www| 欧美日韩国产色视频| 精品久久久久久中文字幕一区奶水| 亚洲精品欧美一区二区三区| 国产美女扒开尿口久久久| 91国在线精品国内播放| 韩国美女主播一区| 九九久久精品一区| 久久综合88中文色鬼| 亚洲男人天天操| 国产精品视频大全| 亚洲伊人第一页| 国产日本欧美一区二区三区在线| 亚洲视频日韩精品| 国产中文字幕91| 亚洲免费成人av电影| 国产精品影片在线观看| 成人有码视频在线播放| 国产在线高清精品| 精品免费在线视频| 久久激情视频免费观看| 久久久久99精品久久久久| 久久久免费精品| 久青草国产97香蕉在线视频| 91久久国产精品91久久性色| 国产午夜精品久久久| 亚洲色图国产精品| 久久久97精品| 国产精品入口夜色视频大尺度| 国产精品嫩草视频| 中文字幕一精品亚洲无线一区| 91精品国产高清久久久久久| 国产精品欧美激情在线播放| 久久成人人人人精品欧| 日韩免费在线免费观看| 亚洲美女福利视频网站| 成人性生交xxxxx网站| 97婷婷大伊香蕉精品视频| 色噜噜狠狠狠综合曰曰曰88av| 亚洲成人激情在线观看| 国产成人av在线| 色狠狠久久aa北条麻妃| 亚洲а∨天堂久久精品9966| 欧美在线视频播放| 91精品综合久久久久久五月天| 亚洲毛片一区二区| 精品福利免费观看| 国产一区二区三区视频在线观看| 亚洲国产91精品在线观看| 欧美成人激情视频免费观看| 高清日韩电视剧大全免费播放在线观看| 日本a级片电影一区二区| 亚洲精品视频中文字幕| 成人激情视频在线播放| 日韩精品免费在线视频| 精品国产乱码久久久久酒店| 国产精品美女在线观看| 成人免费自拍视频| 日韩在线观看免费av| 国产精品av免费在线观看| 久久中文字幕一区| 日本91av在线播放| 精品国偷自产在线视频99| 日韩欧美成人精品| 成人天堂噜噜噜| 亚洲人成在线一二| 国内精品在线一区| 91伊人影院在线播放| 久久乐国产精品| 欧美性猛交丰臀xxxxx网站| 亚洲国产精品美女| 国产伦精品免费视频| 精品久久香蕉国产线看观看亚洲| 国产精品久久久久91| 亚洲国产精品视频在线观看| 国产在线精品成人一区二区三区| 91久久精品一区|