這幾天在做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提供的驅動程式。