0

我有使用 NHibernate 用 C# 编写的 .NET 3.5 应用程序。
在我在 connection.driver_class 属性中有 OracleClientDriver 之前,说我使用 System.Data.Oracle 并且一切正常,但是由于某些原因现在我需要使用 ODP,所以我将此属性更改为:NHibernate.Driver.OracleDataClientDriver。
当我运行我的代码时,在会话工厂创建过程中出现以下错误:

Unable to cast object of type 'Oracle.DataAccess.Client.OracleConnection' to type 'System.Data.Common.DbConnection'

在 Inernet 中短暂搜索后,我找到了解决方案:添加:

<property name="hbm2ddl.keywords">none</property>

所以现在 NHibernate 成功构建了 Session Factory 但在 session.Flush() 中出现以下错误:

System.ArgumentException: Value does not fall within the expected range
at Oracle.DataAccess.Client.OracleParameter.set_DbType(DbType value)
at NHibernate.Driver.DriverBase.InitializeParameter(IDbDataParameter dbParam, String name, SqlTypes sqlType)

有任何想法吗?
谢谢你的前面。但这给了我以下

4

1 回答 1

1

我得到它的工作!

我赢了!所以我之前做了什么:我从 Oracle 客户端 bin 目录中获取 Oracle.DataAccess.dll 并从我的项目程序集中引用它。当我运行 NHibernate Configure() 函数时,我得到第一个错误。当我删除引用时,我收到错误消息,提示我需要在 app.config 中使用 qalifyAssembly 元素来引用 GAC Oracle.DataAccess.dll。

所以我做了什么来解决它:我去了 GAC 并将那里的 Oracle.DataAccess dll 的版本与我之前引用的版本进行了比较。它是:我最近引用的版本是:10.xxx,GAC 中的 dll 版本(实际上有多个 DataAccess dll)是 2.xxx 这里: http ://tiredblogger.wordpress.com/2008/ .. . s-library/ 我发现了与我类似的错误,我添加了这段代码

<runtime>
       <assemblyBinding xmlns=“urn:schemas-microsoft-com:asm.v1“&gt;
              <qualifyAssembly partialName=“Oracle.DataAccess“
                     fullName=“Oracle.DataAccess,
                            Version=2.111.6.20,
                            Culture=neutral,
                            PublicKeyToken=89b483f429c47342“ />
       </assemblyBinding>
</runtime>

到 app.config 如上所述,并引用了这个 dll。我不知道为什么我需要两者都做,但只有这样才有效。

于 2010-06-23T20:46:05.007 回答