2010-06-21 60 views
0

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

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

后在Inernet短的搜索,我发现解决办法:增加:

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

所以现在NHibernate的成功建立会话工厂,但()发生以下错误:

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

我得到它的工作!

我赢了! 所以我之前做了: 我从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-库/ 我发现类似我的错误,我添加了这个代码

<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像上面描述的和refernenced这个DLL。我不知道为什么我需要这样做,但只有这样才行。