在.NET平台下開發Oracle應用的小伙伴們肯定都知道一方面做Oracle開發和實施相比SqlServer要安裝Oracle客戶端(XCopy、自己提取相關文件也有一定復雜性),另一方面相比JAVA平台不如JDBC方便快捷,特別是一些剛接觸Oracle的小伙伴,面臨配置tns.ora、OraHome等等多少有些畏難情緒。
初始廬山
現在,這一切都即將成為過去啦。繼早些時候Oracle官方推出的ODP.NET Managed的Beta版之后,最近的版本已經跟隨12c一起發布了,可以 DLL http://pan.baidu.com/s/1boDID4N 下載。對應的粗看一下,下載了64bit的版本,下載完成后文件不多。
牛刀小試
VS新建一個項目,引用Oracle.ManagedDataAccess.dll,開始隨意碼幾行爛熟的入門級代碼…,可以看到,正如Orale自己描述的,跟以前的API差別很小,所不同的就是命名空間換成了using Oracle.ManagedDataAccess.Client;
OracleConnection con = new OracleConnection(); con.ConnectionString ="user id=scott;password=tiger;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=sales.us.acme.com)))"; con.Open(); OracleCommand cmd = new OracleCommand(); cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = "select * from gy_yonghuxx"; cmd.Connection = con; OracleDataAdapter da = new OracleDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); con.Close(); da.Dispose(); cmd.Dispose(); con.Dispose();
Entity Framework重構
對於已經開始或准備使用Entity Framework的項目(目前版本還不支持Code First),如果熟悉ADO.NET替換起來其實也很簡單,共有三點需要注意
1、配置文件里的連接字符串中provider=Oracle.DataAccess.Client;替換為provider=Oracle.ManagedDataAccess.Client;provider
2、對應實體文件edmx中的Provider="Oracle.DataAccess.Client"也替換為Provider="Oracle.ManagedDataAccess.Client"
3、如果對數據類型映射做過配置(Oracle默認的類型映射有點坑爹),需要將下圖紅線下面的加上去
一探究竟
性能測試我想正式版發布前Oracle官方肯定做過的,自己做測試對比畢竟不夠專業,但粗略看下內部實現多少能看出端倪的,如果看過以前Oracle驅動的dll(Mircrosoft、Oracle、Devert提供的dll)肯定知道以前都是依賴於oci.dll這個接口,調用的最終實現是通過P\Invoke。下圖是順着OracleConnect.Open最后跟蹤到的OracleCommunication的類,在此已經出現了soket、socketStream等對象,可見這次的托管版本托管的還是比較徹底的,個人覺得在性能上應該會比P\Invoke來的高效。