我使用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)
任何想法?
谢谢你提前。
但这让我跟着
答案 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。我不知道为什么我需要两者兼顾,但只有这样才有效。