2010-05-04 6 views
0

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

Вот мой 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,[email protected]@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, замок, 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'

Я умираю, чтобы помочь с этим. Любая помощь приветствуется. Благодаря!

+0

1. Какую версию NHibernate вы используете? 2. Можете ли вы открыть тип iDB2Connection и посмотреть, действительно ли он не наследуется от DbCommand? –

ответ

3

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

Редактировать: Требуется дать Steve Bohlen кредит для того, чтобы вести меня по пути, чтобы открыть это.

+0

Извините за поздний ответ на это. Я думаю, что это ответ. У нас не было ничего, кроме проблем с V5r4 и обновления до 6r1, в то время как в карточках не бывает долгое время. Наш iSeries управляет всей нашей компанией с базой данных 7 тербайтов и тысячами объектов rpg, поэтому это не обновление, которое они принимают легкомысленно. Спасибо за ответ на это. – chrisjlong

+0

Не беспокойтесь, рад, что я мог бы помочь. Удивительно, как мало информации по этой теме. –

+0

вы думаете, что если я просто получу версию драйверов v6r1, я смогу поразить ее v5r4? или что под капотом где-то, что я не могу добраться до него? (то есть водители решают, какую версию использовать) – chrisjlong

0

пытаются добавить

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

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