2010-06-21 9 views
0

J'ai une application .NET 3.5 écrite en C# en utilisant NHibernate.
Avant d'avoir OracleClientDriver dans la propriété connection.driver_class, cela signifie que j'utilise System.Data.Oracle et que tout fonctionne correctement, mais pour certaines raisons, j'ai besoin d'utiliser ODP, donc j'ai changé cette propriété en: NHibernate.Driver.OracleDataClientDriver.
Quand je lance mon code, je reçois l'erreur suivante lors de la session de création d'usine:Problème avec l'utilisation de ODP avec NHibernate

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

Après une courte recherche dans Inernet j'ai trouvé la solution: ajouter:

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

Alors maintenant NHibernate construire avec succès session usine mais tomber en session.Flush() avec l'erreur suivante:

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) 

Des idées?
Merci d'avance. Mais cela me donne suite

Répondre

1

Je le fais fonctionner !!!

Je gagne! Donc ce que j'ai fait avant: Je reçois Oracle.DataAccess.dll à partir du répertoire bin du client Oracle et référencé à partir de mon assembly de projet. Lorsque j'exécute la fonction NHibernate Configure(), j'obtiens la première erreur. Lorsque j'ai supprimé la référence, j'obtiens une erreur qui indique que j'ai besoin d'utiliser l'élément qalifyAssembly dans app.config pour la référence GAC Oracle.DataAccess.dll.

Donc ce que j'ai fait pour le résoudre: Je suis allé à GAC et comparer les versions de dlls Oracle.DataAccess là avec un que j'ai référencé auparavant. C'était: la version de ce que j'ai récemment référencé était: 10.x.x.x et la version de dll dans GAC (en réalité il y avait le nombre de dll DataAccess) était 2.x.x.x. Ici: http://tiredblogger.wordpress.com/2008/ ... s Bibliothèque/ J'ai trouvé une erreur semblable à mon, et j'ajouté ce code

<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 comme décrit ci-dessus et dans refernenced ce dll. Je ne sais pas pourquoi j'ai besoin de faire les deux, mais seulement si ça fonctionne.