用Nhibernate串連多個資料庫,兩個Mysql,一個Sql。還有關於異常和錯誤碼的討論。包含原始碼

來源:互聯網
上載者:User

用Nhibernate有近一年了,把最近的一個項目例子發上來,想學Nh的可以下載參考。
還包含操作Ser和Radius的方式,映射複合主鍵,guid主鍵
程式碼封裝含三個項目:
1、NhibernateService,封裝了NhFactory,NHSession。可以很簡單的增加其他的資料庫。目前串連了兩個MySql資料庫,一個SqlServe
增加新的資料庫:
添加一個類:簡單的繼承SessionFactory就可以了,如下面增加一個串連Ser的庫:

    class SerSessionFactory:SessionFactory
    {
        public static readonly SessionFactory _sessionFactory = new SerSessionFactory();
        protected SerSessionFactory()
            : base("Ser.cfg.xml")
        {
           

        }
    }

添加設定檔:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.0">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
    <property name="connection.connection_string">Server=203.193.42.37;initial catalog=radius;uid=**;pwd=**</property>
    <property name="show_sql">false</property>
    <property name="dialect">NHibernate.Dialect.MySQLDialect</property>
    <!--<property name="use_outer_join">true</property>
    <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>-->
   
    <mapping assembly="LoginBase" />
  </session-factory>
</hibernate-configuration>

然後就可以通過Repository操作資料庫了
Repository簡單的封裝了NhSession,可以操作所有配置好的資料庫。主要參考了Cuyahoga的實現。如果是Web項目可以參考:http://bluewater.cnblogs.com/archive/2006/05/29/412254.html

2、LoginBase 為LoginService提供類庫,用NhibernateService提供的庫操作Ser,Radius和一個Sqlserver。因為LoginServie要求很高的靈活性
這個項目應用了大量的設定檔。包括login.config,errMessage.config,log4net.config,ser.cfg.xml,login.cfg.xml,radius.cfg.xml
通過用序列化實現設定檔和類的轉化,代碼簡化了很多,靈活性不如直接用XMl方式讀取。總結三種設定檔的操作方式:
1,用xmlspy等工具產生xsd,再用xsd.exe產生類,最為簡便
2,自己些xml和類用序列化轉換
3,自己寫xml,類通過xmlreader讀取轉換到類,最靈活。可以實現序列化不能實現的許多功能,如HashTable。見我的http://bluewater.cnblogs.com/archive/2006/05/25/408844.html
這個項目採用了第二種,通過xmlattribute的使用,可以帶來些許靈活性。
異常和錯誤處理:
這個項目在這方面並不完善,主要是對什麼時候用Exception什麼時候用錯誤碼什麼時候用Is之類的檢測函數還很疑惑。
用錯誤碼:1、效率會好點,可是如過客戶沒有Swich一個返回碼回出現許多錯誤。
                   2、不容易找到錯誤發生的原因,因為在調用過程中會隱藏調一些傳回值,加上錯誤碼本身帶的資訊量就少。可以增加Log
                   3、有些程式用返回碼會增加很多複雜性
以前的項目幾乎每個都要返回碼,遇到了大量的問題。
總監也說了好多錯誤碼的優點,還有些應用,不過我還是認為不到必須,就用異常。
這次的異常處理結構:
定義包含異常資訊的類:LoginException這個類並沒有繼承任何.net Exception.因為有些用戶端是檢測不到SoapException的,分析<fault>也不方便。
定義傳回值類:UserInfo繼承了LoginException。繼承會帶來編碼上的方便,雖然看起來不合理。用戶端可以通過UserINfo取到錯誤資訊和傳回值,自己決定是否傳回值合法。
這個項目在LoginBase中是不應該返回UserInfo的,這樣做並不合理。我覺得應該在LoginService中提供UserInfo返回。
希望都說一下錯誤處理的方式,我感覺還是很疑惑的。很難找到一種完美的解決方式。
Is**之類的測試函數也提供了很多方便。
3、LoginService 簡單的服務調用
4、LoginTest,沒有什麼東西,只有很少的測試案例,這個項目用的vs 自己帶的單元測試,感覺比Nunit差好多。

http://www.cnblogs.com/files/bluewater/login.rar
代碼種不合理的地方請大家指正
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.