关于这一点有几个问题,但没有一个真正得到回答。
基本上 - 目前正在使用的是针对enlib(6.0)的ODP.NET实现吗?或者我是否必须为ODP.NET编写映射/自定义DAO的路径?
通用数据库只能让我到目前为止,它与Oracle存储过程不一致(使用GenericDatabase的连接不支持可怕的参数发现。您必须明确指定参数,或配置连接使用从数据库派生的类型,支持参数发现'错误)
我知道entlibcontrib项目 - 但这似乎暂停/死亡,因为它自2011年以来没有新的版本/ entlib 5.0。
任何有关entlib的自定义DAO开发的指示或建议都将受到赞赏。
答案 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;
}
}
}