2013-07-24 45 views
1

關於這個問題存在一些問題,但沒有人真正回答過。Microsoft企業庫6.0中的ODP.NET

基本上 - 目前正在使用enlib(6.0)的ODP.NET實現嗎?或者我將不得不走上爲ODP.NET編寫映射/定製DAO的路線嗎?

通用數據庫到目前爲止只能使用Oracle存儲過程(可怕的'參數發現不支持使用GenericDatabase的連接。您必須明確指定參數,或者將連接配置爲使用類型從支持參數發現的數據庫派生'錯誤)

我知道entlibcontrib項目 - 但這似乎是擱置/死亡,因爲它沒有從2011/entlib 5.0新的釋放。

任何指針,或有關自定義DAO開發Entlib的建議,將不勝感激。

回答

2

下面是我們對這個官方立場:

如果您正在使用Oracle數據庫時,您可以使用附帶的企業庫和ADO.NET Oracle提供,這就需要你引用或甲骨文提供商添加程序集System.Data.OracleClient.dll。但是,請記住,.NET Framework 4.0版中不推薦使用OracleClient提供程序,Enterprise Library 6中不提倡對此提供程序提供支持。雖然對提供程序的支持仍然包含在Enterprise Library 6中,以供將來使用開發人員應考慮選擇使用不同Oracle驅動程序的Database類的不同實現。

我還沒有遇到過爲EntLib6執行ODP.NET。如果您最終更新了EntLibContrib for v5.0上可用的版本,請將其發佈到contrib站點以供其他人從中受益。應該相當簡單,在v6中對DAAB沒有重大改變。

我希望我對你有一個更好的答案,但是在一天結束時,它將歸結爲發佈故事的優先順序,而這個對於我的團隊來說不夠高。

+0

這個答案是罰款。只需要在這個問題上進行「官方」澄清。任何我想出來的(我必須),我會回到EntLibContrib。 –

+0

非常好,謝謝,尼爾。 –

+0

任何完整的源代碼示例使用ODP.net - EnterpriseLibrary? EntLib Contrib? ODP.NET有新版本,完全託管的.NET。 http://stackoverflow.com/a/18193544/206730 – Kiquenet

0

我們使用ODP.NET和企業庫中的GenericDatabase對象成功連接到Oracle 11g。

我們在Oracle軟件包中運行存儲過程時遇到了一個問題(忘記了確切的錯誤是什麼,但是在實際使用命令之前我們遇到了一些問題),並且我們對企業庫做了一些小改動處理它。

在SprocAccessor.cs,我們修改

public override IEnumerable<TResult> Execute(params object[] parameterValues) 

看起來像這樣

public override IEnumerable<TResult> Execute(params object[] parameterValues) 
{ 
    using (DbCommand command = Database.GetStoredProcCommand(procedureName)) 
    {    
     parameterMapper.AssignParameters(command, parameterValues);     
     //return base.Execute(command); Removed 

     //foreach added by ngpojne. This allows the command to be used before it is disposed of. 
     foreach (TResult result in base.Execute(command)) 
     { 
      yield return result; 
     } 
    } 
}