![](/img/trans.png)
[英]Oracle Data Provider (ODP.NET) using Microsoft Enterprise Library 6.0?
[英]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.