Problèmes de connexion à Informix via Entity Framework à partir de Windows

J’ai essayé de me connecter à une firebase database Informix en utilisant Entity Framework à partir d’une application .Net et j’ai rencontré de nombreux problèmes à chaque étape.

En essayant de tester la connexion à la firebase database à l’aide de la commande testconn40, j’obtiens les éléments suivants:

SQL1159 Erreur d’initialisation avec le fournisseur de données DB .NET, code anomalie 7

En essayant de me connecter depuis mon application .Net, j’obtiens l’exception suivante:

Impossible de charger le fichier ou l’assembly ‘IBM.Data.DB2, Version = 9.7.4.4, Culture = neutral, PublicKeyToken = 7c307b91aa13d208’ ou l’une de ses dépendances.

Le tout ci-dessous concerne une application .NET 4.5.1 se connectant à partir d’une machine 64 bits exécutant Windows 7.

Connexion depuis Windows:

Installez d’abord le package de pilotes IBM Data Server (pilote DS): http://www-01.ibm.com/support/docview.wss?uid=swg21385217

Intall le patch 10.5.5 via la ligne de commande avec un nouveau nom:

v10.5fp5_ntx64_dsdriver_EN.exe -n "IBMDBCL2" 

Défini par défaut lors de l’installation, s’il n’est pas défini par défaut, mettez à jour manuellement le chemin d’access système pour qu’il pointe vers le deuxième emplacement d’installation. Dans mon cas: C: \ Program Files \ ibm \ Serveur de données IBM DRIVER_01 \ bin

Essayez d’exécuter la commande suivante à partir de la ligne de commande:

 testconn40 "Database="; Server=:; User ID=; Password=;" 

Si vous obtenez une erreur similaire à la suivante:

SQL1159 Erreur d’initialisation avec le fournisseur de données DB .NET, code anomalie 7

Ouvrez regedit.exe et accédez à: HKEY_LOCAL_MACHINE \ SOFTWARE \ IBM \ DB2 \ InstalledCopies \ et assurez-vous qu’il existe des dossiers pour IBMDBCL1 et IBMDBCL2. Si vous manquez IBMDBCL2, quelque chose ne va pas avec l’installation, vous devrez donc recommencer.

Dans le dossier InstalledCopies, assurez-vous qu’il existe une entrée pour 10.5.5.DEF.4 pointant vers IBMDBCL2. S’il n’y en a pas, ajoutez-en un. La commande testconn40 devrait passer maintenant.

Connexion à partir d’une application .Net à l’aide du package EntityFramework.IBM.DB2:

Installez le package etc normalement, puis essayez d’exécuter l’application. Si vous obtenez l’exception suivante:

FileNotFoundException: Impossible de charger le fichier ou l’assembly ‘IBM.Data.DB2, Version = 9.7.4.4, Culture = neutral, PublicKeyToken = 7c307b91aa13d208’ ou l’une de ses dépendances.

Vous manquez probablement les assemblées du GAC. Donc, allez à l’endroit où les pilotes sont installés:

C: \ Program Files \ ibm \ Serveur de données IBM DRIVER_01 \ bin \ netf40

Et lancez la commande suivante sur la ligne de commande:

 gacutil /i IBM.DATA.DB2.dll gacutil /i IBM.DATA.informix.dll gacutil /i IBM.DATA.DB2.entity.dll 

Vous devriez alors pouvoir voir les assemblys à: C: \ Windows \ Microsoft.NET \ assembly \ GAC_64 \

Si vous obtenez:

BadImageFormatException: Impossible de charger le fichier ou l’assembly ‘IBM.Data.DB2, Version = 9.7.4.4, Culture = neutral, PublicKeyToken = 7c307b91aa13d208’ ou l’une de ses dépendances.

Cela signifie que le framework essaie d’utiliser la DLL 32 bits. Vous pouvez soit indiquer spécifiquement à Visual Studio de s’exécuter en tant que x64, soit accéder aux propriétés du projet dans Visual Studio et vous assurer que l’option “Préférer 32 bits” n’est pas cochée sous l’onglet Générer.

Problèmes avec le préfixe .dbo:

Le dernier problème était que Entity Framework ajoute automatiquement dbo. comme préfixe à tous les noms de table. Informix s’attend à ce que le préfixe soit le propriétaire de la table (dans mon cas, le compte utilisateur utilisé pour créer la table). Dans Server Studio, vous pouvez voir le propriétaire dans l’onglet Général des propriétés de la table.

J’ai pu résoudre en ajoutant la ligne de code suivante à ma classe de contexte (notez les guillemets simples):

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema($"'{}'"); ... } 

J’espère que cela aidera toute autre personne essayant de se connecter à Informix via Entity Framework.

Pendant plusieurs semaines, j’ai eu le même problème et OP –

Impossible de charger le fichier ou l’assembly ‘IBM.Data.DB2, Version = 9.7.4.4, Culture = neutral, PublicKeyToken = 7c307b91aa13d208’ ou l’une de ses dépendances.

Eh bien, j’ai ajusté mon projet .NET – définissez-le sur 32 bits uniquement. Maintenant ça marche. Apparemment, mes pilotes IBM DB2 ne sont que 32 bits et le 64 bits ne se charge pas.