проблема с NHibernate и iSeries DB2 - PullRequest
1 голос
/ 05 мая 2010

ОК. Итак, у меня AS400 / iSeries с v5r4. У меня есть приложение, которое использует классический NHibernate для подключения и выполнения некоторых основных действий. Теперь я вытащил это приложение (которое просуществовало 2 года) с полки TFS на новый ПК и, похоже, не может его запустить.

Вот мой Hibernate Config:

<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>

У меня есть все необходимые DLL (NHibernate, castle, iesi, antlr3, log4 и т. Д.). Также есть эта строка в моем 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>

Все же я получаю следующую ошибку, как только я звоню

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

Ошибка выглядит следующим образом

Невозможно привести объект типа 'IBM.Data.DB2.iSeries.iDB2Connection' набрать 'System.Data.Common.DbCommand'

Я очень хочу получить помощь с этим. Любая помощь приветствуется. Спасибо!

Ответы [ 3 ]

4 голосов
/ 03 июня 2010

У меня была эта проблема при использовании V5r4 доступа к системе iSeries. IBM.Data.DB2.iSeries.dll скомпилирован для .NET 1.0 / 1 до v6r1. Из-за этого невозможно преобразовать IDB2Connection в IDbConnection. Если вы используете рефлектор и загляните в IBM dll, посмотрите по ссылкам, а затем посмотрите на версию System.Data. Затем посмотрите на версию System.Data, на которую вы ссылаетесь в своем проекте. Я предполагаю, что вы на 2.0.5 ****. Если вы обновитесь до v6r1 или выше, вы сможете кастовать.

Редактировать: Хотел дать Стиву Болену кредит за то, что он повел меня по пути, чтобы обнаружить это.

0 голосов
/ 29 апреля 2011

Я решил эту проблему, изменив ссылку на IBM.Data.DB2.dll для копирования локальной

0 голосов
/ 07 мая 2010

попробуйте добавить

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