Microsoft Enterprise Library 6.0中的ODP.NET

时间:2013-07-24 08:22:50

标签: enterprise-library odp.net daab enterprise-library-6

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

基本上 - 目前正在使用的是针对enlib(6.0)的ODP.NET实现吗?或者我是否必须为ODP.NET编写映射/自定义DAO的路径?

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

我知道entlibcontrib项目 - 但这似乎暂停/死亡,因为它自2011年以来没有新的版本/ entlib 5.0。

任何有关entlib的自定义DAO开发的指示或建议都将受到赞赏。

2 个答案:

答案 0 :(得分:2)

以下是我们对此的正式立场:

  

如果您正在使用Oracle数据库,则可以使用Enterprise Library附带的Oracle提供程序和ADO.NET Oracle提供程序,这需要您引用或添加程序集 System.Data.OracleClient.dll < / strong>即可。但是,请记住,在.NET Framework 4.0版中不推荐使用OracleClient提供程序,并且在Enterprise Library 6中不推荐对此提供程序的支持。尽管对Enterprise OracleClient 提供程序的支持仍然包含在Enterprise库6,为了将来的开发,您应该考虑选择使用不同Oracle驱动程序的Database类的不同实现。

我没有遇到过针对EntLib6的ODP.NET实现。如果您最终更新了EntLibContrib for v5.0上的可用库,请将其发布到contrib站点以供其他人使用。应该相当简单,在v6中对DAAB没有重大改变。

我希望我能给你一个更好的答案,但最终归结为发布故事的优先次序,而且这个故事并不足以让我的团队接受。

答案 1 :(得分: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;
        }
    }
}