我正在尝试使用 Devart 的 dotConnect for Oracle 试用来获得一个简单的概念验证,因为我们目前使用 .Net 框架 OracleClient(由于不推荐使用),但我们还需要在不需要连接的情况下进行连接Oracle 客户端甚至即时客户端。出于这个原因,我试图向我的老板证明 dotConnect 是这项工作的工具,因为它的直接模式和与 Enterprise Library 5 一起工作的能力(用于我们的数据访问层)。我遵循了 Devart 提供的示例,包括在测试应用程序的 app.config 中添加自定义提供程序映射。这一切似乎在我的开发机器上都可以在 IDe 和已编译的应用程序中运行,所以我将它包装在一个简单的设置和部署项目中,
它只是不想工作。测试执行一个简单的选择语句并在列表视图中显示结果(如果有的话 - 如果没有,您会收到一条消息)。我实际上并不关心结果本身,而只是得到它们的行为。问题是当我执行测试时,我得到了无用的 EL 错误:
Activation error occured while trying to get instance of type Database, key "Testing26_devart"
这是有问题的代码行:
Dim db As Database = EnterpriseLibraryContainer.Current.GetInstance(Of Database)(EnvironmentName)
这是 app.config 文件中的提供程序映射:
<add databaseType="Devart.Data.Oracle.EnterpriseLibrary.OracleDatabase, Devart.Data.Oracle.EnterpriseLibrary, Version=3.5.4456.40828, Culture=neutral, PublicKeyToken=null" name="Devart.Data.Oracle" />
这是 app.config 中的连接字符串:
<add name="Testing26_devart" connectionString="User Id=Testing26;Password=Testing26;Server=ORACLE-SERVER;Direct=True;Sid=DEVORA;Port=1523;"
providerName="Devart.Data.Oracle" />
我知道这个错误可能是由于使用了错误的连接字符串名称(除其他外)引起的,但我知道这是正确的,因为我首先从配置文件中检索它。这也与开发环境中使用的配置完全相同。内部例外是这样的:
Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "Microsoft.Practices.EnterpriseLibrary.Data.Database", name = "Testing26_devart".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The type Database cannot be constructed. You must configure the container to supply this value.
我怀疑提供程序映射是罪魁祸首,因为如果我将连接字符串中的提供程序更改为System.Data.OracleClient
then 它完全没有问题找到连接字符串,而是抱怨不支持的关键字Direct
(来自 dotConnect Direct 模式开关),这是有道理的。
我看不出我在提供者映射方面做错了什么。我以前没有使用过它,但我使用了 EL 配置工具来确保它的正确性,自定义库包含在可执行文件(和其他 EL 库)中。我看过几个例子,所有这些都表明我有正确的配置,那么我错过了什么?这让我发疯了。