PetaPoco利用ODP.NET Managed Driver串連Oracle

來源:互聯網
上載者:User

標籤:噁心   sharp   div   而且   string   client   安裝oracle   odi   目錄   

以下內容來源自,只是為了方便查詢轉載過來:

http://www.cnblogs.com/yanxiaodi/p/5038387.html

 

大概幾年之前用PetaPoco做過一個Oracle的項目,開發的時候還需要安裝oracle的client,非常麻煩。調試好環境後,一直到項目結束都不敢重裝系統。最近又有一個需求需要讀取oracle,可是環境已經沒了……

再重新設定吧,先使用nuget下載安裝了PetaPoco,沒想到最新的版本變動比較大,貌似缺少幾個類,時間緊急沒時間折騰了,於是下載了一箇舊版5.0.1。但是實在不想安裝oracle client那麼肥的東西,就想使用Oracle.DataAccess.dll來直接存取。

在App.config檔案裡添加資料庫字串:

<connectionStrings>

<add name="MyDbContext"

connectionString="Data Source=(DESCRIPTION=

(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=1521)))

(CONNECT_DATA=(SERVICE_NAME=ORCL)));

User Id=scott;Password=xxx;"

providerName="Oracle.DataAccess.Client"                />

</connectionStrings>

 

修改T4模板Database.tt的以下幾個地方:

ConnectionStringName = "MyDbContext";            // Uses last connection string in config if not specified

Namespace = "Domain.Models";

RepoName = "MyDbContext";

 

儲存,毫無疑問的報錯了:

// -----------------------------------------------------------------------------------------

// Failed to load provider `Oracle.DataAccess.Client` - 找不到請求的 .Net Framework Data Provider。可能沒有安裝。

// -----------------------------------------------------------------------------------------

 

肯定還是驅動沒裝好,在搜尋解決辦法的時候,找到這兩篇文章:

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

 

Oracle:ODP.NET Managed 小試牛刀

 

原來Oracle已經推出了可託管的驅動,而且不區分32位還是64位了,這樣應該就更方便了。Oracle官網上的下載簡直要噁心死人。於是按照說明從nuget裡搜尋odp.net.managed:

安裝後修改資料庫連接字串的provider:

providerName="Oracle.ManagedDataAccess.Client"

 

又報錯了,還是相同的錯誤,找不到Oracle.ManagedDataAccess.Client這個驅動:

// -----------------------------------------------------------------------------------------

// Failed to load provider `Oracle.ManagedDataAccess.Client` - 找不到請求的 .Net Framework Data Provider。可能沒有安裝。

// -----------------------------------------------------------------------------------------

 

看來直接安裝nuget還是不行啊,還是得老老實實上官網下,找到這個頁面:

http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html

一堆啊!!!下哪個啊???

我下的是這個:

解壓縮之后里面有幾個檔案夾和dll,dll我們已經通過nuget安裝了就不管了,裡面有一個install_odpm.bat,看來是得安裝一下了。直接運行,刷一下就沒了,再運行還是刷一下就沒了。

那就先開cmd吧。運行cmd找到這個bat,運行一下:

原來是不能直接啟動並執行,還要加參數。按照第三種方式運行,又報錯了:

看來需要啟用管理員權限,使用管理員模式運行cmd,終於可以成功了。

開啟這個bat可以看到其實就是copy了幾個檔案到系統目錄,自動添加了tnsnames.ora這些檔案。

再運行一下Database.tt,這次就報其他的錯了:

// -----------------------------------------------------------------------------------------

// Failed to read database schema - ‘ user id‘ 是無效的連接字串屬性

// -----------------------------------------------------------------------------------------

 

看來驅動已經正常載入上了。那為什麼報這個錯呢?

找了半天原因,原來是資料庫連接字串不能有換行!否則PetaPoco的T4模板就讀不到了……

 

還有,oracle官網最新的版本已經是12.1.0.2.4了,nuget上的版本貌似還沒更新。

 
評論: #1樓 2016-06-13 12:20 | Marksion  
請問解決了嗎?支援(0)反對(0)  回複引用#2樓 2016-11-17 12:34 | Leaf.Duan  
其實就是要配置 config 的 DbProviderFactories 就好了。一般 Web 專案,修改 web.config 的配置就好了,當然可以修改 machine.config ,這個是全域的,配置好了其他所有項目都不用配置了。
發現這個配置還有一個好處,就是項目可以不用直接依賴各個 data driver 的 dll,比如 NHibernate,支援那麼多資料庫,但它本身沒有依賴那些 dll,而是用的 DbProviderFactory。
參考一下我的配置(web.config):
12345678 <system.data>    <DbProviderFactories>      <remove invariant="Npgsql" />      <add name="PostgreSQL Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=3.1.8.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />      <remove invariant="Oracle.ManagedDataAccess.Client" />      <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.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />    </DbProviderFactories>  </system.data>
支援(0)反對(0)  回複引用

PetaPoco利用ODP.NET Managed Driver串連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.