使用ODP与NHibernate的问题

时间:2010-06-21 12:00:14

标签: .net nhibernate odp.net

我使用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)

任何想法?
谢谢你提前。 但这让我跟着

1 个答案:

答案 0 :(得分:1)

我开始工作!!!

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

所以我做了解决它的方法: 我去了GAC并比较了之前引用的Oracle.DataAccess dll版本。它是:我最近引用的版本是:10.x.x.x和GAC中的dll版本(实际上有数量的DataAccess dll)是2.x.x.x.这里: http://tiredblogger.wordpress.com/2008/ ... s-library / 我发现类似于我的错误,我添加了此代码

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

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