NHibernate串連Oracle配置問題

來源:互聯網
上載者:User

這幾天在做NHibernate串連Oracle的測試,設定檔是從NHibernate發行包裡拷貝出來的,做了簡單的串連字元的修改,設定檔如下:

代碼

<?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="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
<property name="connection.connection_string">
User ID=xx;Password=xx;Data Source=xx;
</property>
<property name="show_sql">false</property>
<property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<mapping assembly="Model"/>
</session-factory>
</hibernate-configuration>

修改了兩處內容:

一修改dialect為NHibernate.Dialect.Oracle10gDialect,(我用的是oracle10g)原來的為NHibernate.Dialect.OracleDialect,不修改會提示對應檔不能編譯,這個錯誤有點奇怪。

二增加mapping節點,來指定對應檔所在程式集

好了,簡單的寫個測試程式,再測試一下,OK測試能過。

我們看到在設定檔中有一行:<!-- This is the System.Data.OracleClient.dll provider for Oracle from MS -->,這裡使用的是微軟提供的驅動程式,我們改成Oracle提供的試試。在設定檔中把 NHibernate.Driver.OracleClientDrivern改成 NHibernate.Driver.OracleDataClientDrivern。OK再測試,提示“Could not create the driver from NHibernate.Driver.OracleDataClientDriver.”,應該是我們沒有添加Oracle.DataAccess的引用,我們來添加引用,很奇怪在添加程式集的視窗中的.Net選項卡,找不到,沒有關係,我們在瀏覽選項卡裡找,在“X:\oracle\product \10.2.0\client_1\BIN”目錄下找到並選擇Oracle.DataAccess.dll,再來做測試。還是提示“Could not create the driver from NHibernate.Driver.OracleDataClientDriver.”,我們找到Oracle.DataAccess.dll,拷貝到測試程式的bin目錄下,再運行。這次還是報錯,不過錯誤提示變了,“Unable to cast object of type 'Oracle.DataAccess.Client.OracleConnection' to type 'System.Data.Common.DbConnection'.”,上網google了好久,沒有找到解決辦法,後來看到園友1-2-3在用NHibernate調用Oracle的預存程序 這篇文章找到瞭解決辦法,在設定檔中增加一行:“<property name="hbm2ddl.keywords">none</property>”,再次執行我們的測試程式,這次執行通過。

 

微軟和Oracle都提供了.net串連Oracle資料庫的驅動程式,一般認為Oracle所提供的驅動程式效能上要優於微軟提供的。在.net4.0中使用System.Data.OracleClient時,會得到警告資訊:“'System.Data.OracleClient.OracleConnection' is obsolete: 'OracleConnection has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260' ”,在給出的這個連結上有這麼一句話:“The types in System.Data.OracleClient are deprecated. The types are supported in version 4 of the .NET Framework but will be removed in a future release. Microsoft recommends that you use a third-party Oracle provider.”意思是System.Data.OracleClient是不再被推薦使用的,並且在4.0以後的版本將被移除,微軟推薦你使用 Oracle提供的驅動程式。

這幾天在做NHibernate串連Oracle的測試,設定檔是從NHibernate發行包裡拷貝出來的,做了簡單的串連字元的修改,設定檔如下:

代碼

<?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="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
<property name="connection.connection_string">
User ID=xx;Password=xx;Data Source=xx;
</property>
<property name="show_sql">false</property>
<property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<mapping assembly="Model"/>
</session-factory>
</hibernate-configuration>

修改了兩處內容:

一修改dialect為NHibernate.Dialect.Oracle10gDialect,(我用的是oracle10g)原來的為NHibernate.Dialect.OracleDialect,不修改會提示對應檔不能編譯,這個錯誤有點奇怪。

二增加mapping節點,來指定對應檔所在程式集

好了,簡單的寫個測試程式,再測試一下,OK測試能過。

我們看到在設定檔中有一行:<!-- This is the System.Data.OracleClient.dll provider for Oracle from MS -->,這裡使用的是微軟提供的驅動程式,我們改成Oracle提供的試試。在設定檔中把 NHibernate.Driver.OracleClientDrivern改成 NHibernate.Driver.OracleDataClientDrivern。OK再測試,提示“Could not create the driver from NHibernate.Driver.OracleDataClientDriver.”,應該是我們沒有添加Oracle.DataAccess的引用,我們來添加引用,很奇怪在添加程式集的視窗中的.Net選項卡,找不到,沒有關係,我們在瀏覽選項卡裡找,在“X:\oracle\product \10.2.0\client_1\BIN”目錄下找到並選擇Oracle.DataAccess.dll,再來做測試。還是提示“Could not create the driver from NHibernate.Driver.OracleDataClientDriver.”,我們找到Oracle.DataAccess.dll,拷貝到測試程式的bin目錄下,再運行。這次還是報錯,不過錯誤提示變了,“Unable to cast object of type 'Oracle.DataAccess.Client.OracleConnection' to type 'System.Data.Common.DbConnection'.”,上網google了好久,沒有找到解決辦法,後來看到園友1-2-3在用NHibernate調用Oracle的預存程序 這篇文章找到瞭解決辦法,在設定檔中增加一行:“<property name="hbm2ddl.keywords">none</property>”,再次執行我們的測試程式,這次執行通過。

 

微軟和Oracle都提供了.net串連Oracle資料庫的驅動程式,一般認為Oracle所提供的驅動程式效能上要優於微軟提供的。在.net4.0中使用System.Data.OracleClient時,會得到警告資訊:“'System.Data.OracleClient.OracleConnection' is obsolete: 'OracleConnection has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260' ”,在給出的這個連結上有這麼一句話:“The types in System.Data.OracleClient are deprecated. The types are supported in version 4 of the .NET Framework but will be removed in a future release. Microsoft recommends that you use a third-party Oracle provider.”意思是System.Data.OracleClient是不再被推薦使用的,並且在4.0以後的版本將被移除,微軟推薦你使用 Oracle提供的驅動程式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.