.NET Oracle Developer的福音——ODP.NET Managed正式推出

  在.NET平臺下開發Oracle應用的小夥伴們確定都知道一方面作Oracle開發和實施相比SqlServer要安裝Oracle客戶端(XCopy、本身提取相關文件也有必定複雜性),另外一方面相比JAVA平臺不如JDBC方便快捷,特別是一些剛接觸Oracle的小夥伴,面臨配置tns.ora、OraHome等等多少有些畏難情緒。html

初始廬山

  如今,這一切都即將成爲過去啦。繼早些時候Oracle官方推出的ODP.NET Managed的Beta版以後,最近的版本已經跟隨12c一塊兒發佈了,能夠在此下載。對應的12c文檔粗看一下,下載了64bit的版本,下載完成後文件很少。sql

image

  一個readme.htm中只寥寥數語,熟悉的network文件夾至關於與一個tnsnames和sqlnet的模板,managed裏也提供裏一個文檔,裏面描述也不多,主要介紹一些配置和BUG狀況,核心就在common裏面的Oracle.ManagedDataAccess.dll這個文件了,Oracle.ManagedDataAccess.Client.Configuration.Section.xsd這個文件一看就知道是提供給vs的xml編輯器提供智能提示的,接着裏面還區分了X64和X86的文件夾,一方便主要是分佈式事務的Oracle.ManagedDataAccessDTC.dll不一樣,另外一個就是bat文件裏相關命令不一樣了。oracle

image

若是你對以前的ODP.NET的OraProvCfg已經比較熟悉的話,那麼configure.bat裏面的內容就很好理解了,這個批處理一共幹了這麼幾件事情,其中二、四、5其實並非必須的:socket

一、將驅動對應db factory註冊以及添加configuration處理器,其實就是在machine.config裏增長<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />和<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />,這樣在接下來的開發和部署中才能識別Oracle.ManagedDataAccess.Client的驅動以及oracle.manageddataaccess.client的配置節點(其實若是在單獨的程序配置也是能夠的,須要注意的是是否使用gac)tcp

二、添加ODP.NET Managed的性能計數器(Performance Counter)編輯器

三、將Oracle.ManagedDataAccess.dll添加到GAC中分佈式

四、提供在VS開發環境下配置節點的智能提示,其實就是將以前提到的Oracle.ManagedDataAccess.Client.Configuration.Section.xsd拷貝到VS對應目錄下ide

五、添加日誌記錄性能

六、添加VS開發環境對Oracle.ManagedDataAccess.dll引用的支持測試

image

 

牛刀小試

  VS新建一個項目,引用Oracle.ManagedDataAccess.dll,開始隨意碼幾行爛熟的入門級代碼…,能夠看到,正如Orale本身描述的,跟之前的API差異很小,所不一樣的就是命名空間換成了using Oracle.ManagedDataAccess.Client;

   1:              OracleConnection con = new OracleConnection();
   2:              con.ConnectionString = "user id=his3;password=his3;data source=192.168.1.237/ORCL";
   3:              con.Open();
   4:   
   5:              OracleCommand cmd = new OracleCommand();
   6:              cmd.CommandType = System.Data.CommandType.Text;
   7:              cmd.CommandText = "select * from gy_yonghuxx";
   8:              cmd.Connection = con;
   9:   
  10:              OracleDataAdapter da = new OracleDataAdapter();
  11:              da.SelectCommand = cmd;
  12:              DataSet ds = new DataSet();
  13:              da.Fill(ds);
  14:   
  15:              con.Close();
  16:              da.Dispose();
  17:              cmd.Dispose();
  18:              con.Dispose();

 

  眼力好的夥伴確定能立刻發現ConnectionString的特殊之處,字符鏈接串有三種方式 :

  a、tns alias:"user id=scott;password=tiger;data source=sales";在此具體的對應tns文件是能夠在config文件中指定,好比個人machine.config給我默認了一個<setting name="tns_admin" value="d:\installsoft\oracle\odp.net_managed121010\odp.net\managed\x64\..\..\..\network\admin" />

  b、Connect Descriptor:該種方式就是將tns配置的一段拿出來寫進去,相比c的有點在於可配置項全面

  "user id=scott;password=tiger;data source=" + 
     "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)" + 
     "(HOST=sales-server)(PORT=1521))(CONNECT_DATA="+
     "(SERVICE_NAME=sales.us.acme.com)))"
 c、Easy Connect Naming Method:PROTOCOL等一些選項好像就沒地方配置了
  "user id=scott;password=tiger;data source=//sales-server:1521/sales.us.acme.com"
 

Entity Framework重構

   對於已經開始或準備使用Entity Framework的項目(目前版本還不支持Code First),若是熟悉ADO.NET替換起來其實也很簡單,共有三點須要注意
 一、配置文件裏的鏈接字符串中provider=Oracle.DataAccess.Client;替換爲provider=Oracle.ManagedDataAccess.Client;provider
 二、對應實體文件edmx中的Provider="Oracle.DataAccess.Client"也替換爲Provider="Oracle.ManagedDataAccess.Client"
 三、若是對數據類型映射作過配置(Oracle默認的類型映射有點坑爹),須要將下圖紅線下面的加上去
image 

一探究竟

    性能測試我想正式版發佈前Oracle官方確定作過的,本身作測試對比畢竟不夠專業,但粗略看下內部實現多少能看出端倪的,若是看過之前Oracle驅動的dll(Mircrosoft、Oracle、Devert提供的dll)確定知道之前都是依賴於oci.dll這個接口,調用的最終實現是經過P\Invoke。下圖是順着OracleConnect.Open最後跟蹤到的OracleCommunication的類,在此已經出現了soket、socketStream等對象,可見此次的託管版本託管的仍是比較完全的,我的以爲在性能上應該會比P\Invoke來的高效。

image

相關文章
相關標籤/搜索