NH5—NHibernate的ISessionFactory的建立

一、Nhibernate 的環境說明

在使用以前我本身的電腦環境是64位,64位的oracle,32位的客戶端。因此報了一個錯誤。我在網上找到這個哥們的博客html

http://www.cnblogs.com/joey0210/archive/2012/08/15/2640248.html ,問題是同樣的,狀況也是同樣的,我感受多是權限問題,我還在調試中。上面的問題一搜一大推解決方法程序員

將項目生成改成x86的便可
數據庫


二、傳統方式建立ISessionFactory

        這種傳統的建立ISessionFactory的方法適用於前面的特性映射,xxx.hbm.xml映射文件這類的映射方式,可是Fluent這種映射方式須要不同方法建立ISessionFactory,好咱們如今先說傳統的方式。c#

public class SessionFactory
{
    private static ISessionFactory sessionFactory
    {
        get;
        set;
    }

    public static ISessionFactory GetCurrentFactory()
    {
        if (sessionFactory == null)
        {
            sessionFactory = CreateSessionFactory();
        }
        return sessionFactory;
    }

    private static ISessionFactory CreateSessionFactory()
    {
        return new Configuration().Configure().BuildSessionFactory();
        //上一篇說了,若是你的配置文件不在根目錄那麼就須要手動的調用這個文件的位置
        //Configuration cfg = new Configuration().Configure(filePath);
    } 
}


後面的用法
void AddPost()
{// initialize the configuration   Configuration cfg = new Configuration();
cfg.AddAssembly("NHClass");   ISessionFactory factory = cfg.BuildSessionFactory();   // start a session with the database// the ISession object represents a connection to your backend database   ISession session = factory.OpenSession();   // the ITransaction object represents a NH Managed transaction// always start a transaction before u want to do something on the backend database    ITransaction trans = session.BeginTransaction();// initialize ur Post    Post post = new Post();
post.PostID = Guid.NewGuid();
post.Title = "hello Nibernate";
post.Content = "foo test";
post.Creator = "foo";
post.LastUpdator = "bar";
post.CreateDate = System.DateTime.Now.Date;
post.LastUpdateDate = System.DateTime.Now.Date;// store the new post    session.Save(post);// commit the transaction    trans.Commit();// end the session    session.Close();
}


三、Fluent方式建立ISessionFactory


這部分寫的時候須要寫那個數據庫主鍵選擇策略
session

在建立的時候遇到一個問題oracle

網上不少解決方法,有一種說法是這樣的,不過我再測試好像不行
app

oh,困擾了一天的問題終於解決了,哎,看來這貼是發錯地方了,居然沒人理。

ISessionFactory  factory = Configuration.BuildSessionFactory();
要在註冊了實體之後調用,否則這個工廠建立出來的ISession是不認識這些持久化類的,哎,調試一天,最後才發現。。        工具

http://bbs.csdn.net/topics/330269091  要post

要注意更層之間的引用問題,別少引用了東西
學習

四、傳統方式和Fluent的對比

     上面的演示相信你們都能看明白,二者之間的對比也比較明顯的顯露出來,傳統的方式咱們只須要編寫正確的配置文件,相對比較靈活,一些修改的話均可以在配置 文件中進行更新,好比Mappings,而上面的代碼,Fluent雖然使用代碼的方式進行了配置,省去了配置文件,但靈活性卻沒有傳統方式那麼好,修改 一些配置的時候,咱們得擴充咱們的CreateSessionFactory的方法,不過Fluent更符合人類的思考行爲,並且有VS這麼強大IDE, 在編寫代碼的同時,可以享受強大的智能感知。

     二者之間都各有長短,或許你尚未體會到Fluent的強大,在往後的Mappings時,你會慢慢了解爲何他會叫Fluent。傳統方式對於一些常常 使用的程序員來講很是簡便,加上代碼生成工具,使用起來也會遊刃有餘,但對於新手來講,Fluent絕對是一個好幫手。

4、靈活的Fluent

     那咱們Fluent就沒有辦法靈活了嗎?固然不,Fluent的開發者不只幫你保留了原有的方式,還能夠混合你的配置文件,最有意思的時,你還可使用它 來學習NHibernate,甚至可使用它來開發你本身的自動代碼生成工具,由於我也剛學,先介紹一些簡單的,至於其餘功能,但願你們也能跟我一塊兒學 習,體驗Fluent帶來的快感。


5支持的代碼鏈接數據庫的方式

image

相關文章
相關標籤/搜索