开发者

problem with NHibernate and iSeries DB2

Ok So I have an AS400/iSeries running v5r4. I have an application that was using classic NHibernate to connect and do some basic crud. Now I have pulled that app (which sat for 2 years) off the shelf of TFS and onto a new PC and cannot seem to get it running.

Here is my Hibernate Config:

&l开发者_运维技巧t;hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      <property name="connection.provider">
        NHibernate.Connection.DriverConnectionProvider
      </property>
      <property name="dialect">
        NHibernate.Dialect.DB2400Dialect
      </property>
      <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
      <property name="connection.connection_string">
        DataSource=207.206.106.19;
        Database=AS400;
        userID=XXXXXX;
        Password=XXXXXXX;
        LibraryList=FMSFILTST,BEFFILT,HRDBFT,HRCSTFT,J20##X2DEV,GLCUSTDEV,OSL@@F3DEV;
        Naming=System;
        Initial Catalog=*SYSBAS;
      </property>
      <property name="use_outer_join">true</property>
      <property name="query.substitutions">
        true 1, false 0, yes 'Y', no 'N'
      </property>
      <property name="show_sql">false</property>
      <mapping assembly="BusinessLogic" />
    </session-factory>
  </hibernate-configuration>

I have all the proper DLL's included (NHibernate, castle, iesi, antlr3 , log4 etc). Also have this line in my web.config

<runtime>
    <assemblyBinding>
      <qualifyAssembly partialName="IBM.Data.DB2.iSeries" fullName="IBM.Data.DB2.iSeries,Version=10.0.0.0,PublicKeyToken=9CDB2EBFB1F93A26,Culture=neutral"/>
    </assemblyBinding>
  </runtime>

Yet I am still getting the following error as soon as I call

NHibernate.Cfg.Configuration().Configure().BuildSessionFactory().OpenSession();

The error is as follows

Unable to cast object of type 'IBM.Data.DB2.iSeries.iDB2Connection' to type 'System.Data.Common.DbCommand'

I am dying to get some help with this. Any assistance is appreciated. Thanks!


I had this issue when using V5r4 of the iSeries system access. The IBM.Data.DB2.iSeries.dll is compiled against .NET 1.0/1 before v6r1. Because of this it is unable to cast the IDB2Connection to IDbConnection. If you use reflector and look into the IBM dll, look under references and then look at System.Data version. Then look at the version of System.Data you are referencing in your project, I am guessing you are on 2.0.5****. If you upgrade to v6r1 or higher you should be able to cast.

Edit: Wanted to give Steve Bohlen credit for leading me down the path to discover this.


try to add

<property name="connection.driver_class">
NHibernate.Driver.DB2400Driver
</property>


I've solved this by changing the reference to IBM.Data.DB2.dll to copy local

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜