簡體   English   中英

Microsoft Enterprise Library 6.0中的ODP.NET

[英]ODP.NET in Microsoft Enterprise Library 6.0

關於此問題有兩個問題,但是沒有一個真正的答案。

基本上-當前是否正在使用針對enlib(6.0)的ODP.NET實現? 還是我必須沿着為ODP.NET編寫映射/自定義DAO的路線走下去?

通用數據庫只能解決我的問題,它與Oracle存儲過程不兼容(可怕的“使用GenericDatabase的連接不支持參數發現。必須顯式指定參數,或將連接配置為使用從數據庫派生的類型,支持參數發現錯誤)

我知道entlibcontrib項目-但這似乎被擱置了,因為自2011 / entlib 5.0以來沒有新的實現。

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

這是我們對此的官方立場:

如果使用的是Oracle數據庫,則可以使用Enterprise Library附帶的Oracle提供程序和ADO.NET Oracle提供程序,這需要您引用或添加程序集System.Data.OracleClient.dll 但是,請記住,在.NET Framework 4.0版中不建議使用OracleClient提供程序,在企業庫6中不建議使用該提供程序。盡管對於將來的開發,企業庫6中仍包含對OracleClient提供程序的支持。應該考慮選擇使用不同Oracle驅動程序的Database類的不同實現。

我還沒有遇到過針對EntLib6的ODP.NET實現。 如果確實要更新EntLibContrib v5.0上可用的版本,請將其發布到contrib站點上,以使其他人受益。 應該相當簡單,在v6中對DAAB沒有重大更改。

我希望我能為您提供一個更好的答案,但是最終歸結為發布故事的優先次序,而這對於我的團隊來說還不夠高。

我們已經使用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;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM