ODP.NET in Microsoft Enterprise Library 6.0



关于这一点,有几个问题悬而未决,但没有一个得到真正的回答。

基本上,目前是否有针对enlib(6.0)的ODP.NET实现正在使用?还是我必须为ODP.NET编写一个映射/自定义DAO?

通用数据库只能让我走到目前为止,它与Oracle存储过程不兼容(可怕的"使用GenericDatabase的连接不支持参数发现。您必须显式指定参数,或将连接配置为使用从支持参数发现的数据库派生的类型"错误)

我知道entlibcontrib项目,但这似乎是搁置/死亡,因为自2011/entlib 5.0以来,它还没有一个新的realeasy。

任何关于entlib的自定义DAO开发的指针或建议都将不胜感激。

以下是我们对此的官方立场:

如果您使用的是Oracle数据库,则可以使用企业库中包含的Oracle提供程序和ADO.NET Oracle提供程序,这要求您引用或添加程序集System.Data.OracleClient.dll。但是,请记住,OracleClient提供程序在.NET Framework 4.0版本中已被弃用,并且在Enterprise Library 6中不赞成支持此提供程序。尽管Enterprise Library 6中仍然包含对OracleClient提供程序的支持,但为了将来的开发,您应该考虑选择使用不同Oracle驱动程序的数据库类的不同实现。

我还没有遇到针对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;
        }
    }
}

最新更新