IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

Npgsql et EdmGen2 => problème génération EDMX


Sujet :

Accès aux données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Points : 79
    Points
    79
    Par défaut Npgsql et EdmGen2 => problème génération EDMX
    Bonjour,

    Je rencontre une difficulté pour générer un EDMX d'une base de données PostgreSQL via NpgSql et EdmGen2.

    1) J'ai rajouter dans le GAC (copier/coller dans C:\WINNT\assembly):
    - Npgsql.dll(2.0.11.91)
    - Mono.Security.dll (2.0.0.0)

    2) J'ai rajouter dans la section <system.data><DbProviderFactories>
    - <add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.11.91, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
    Ceci pour le fichier:
    - C:\WINNT\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config
    - C:\WINNT\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

    3) Je télécharge Edmgen2
    4) Je lance al solution dans Visual Studio Ultimate 2010
    5) Je build (F6)
    6) Je lance un "cmd" dans le dossier debug de la solution et j'éxécute la commande suivante.
    edmgen2.exe /ModelGen "Server=127.0.0.1;Port=5432;User Id=postgres;Password=a1b2c3d4;Database=school;" Npgsql school

    Et la j'ai une erreur
    "Unhandled Exception: System.Data.ProviderIncompatibleException: A null was returned after calling the 'GetService' method on a store pr
    ovider instance of type 'Npgsql.NpgsqlFactory'. The store provider might not be functioning correctly.
    at System.Data.Entity.Design.Common.MetadataUtil.GetProviderServices(DbProviderFactory factory)
    at System.Data.Entity.Design.EntityStoreSchemaGenerator.CreateStoreSchemaConnection(String providerInvariantName, String connectionS
    tring)
    at System.Data.Entity.Design.EntityStoreSchemaGenerator..ctor(String providerInvariantName, String connectionString, String namespac
    eName)
    at EdmGen2.EdmGen2.ModelGen(String connectionString, String provider, String modelName, Version version, Boolean includeForeignKeys)
    in c:\Users\TO101279\Desktop\EdmGen2\EdmGen2\EdmGen2\EdmGen2.cs:line 170
    at EdmGen2.EdmGen2.ModelGen(String[] args) in c:\Users\TO101279\Desktop\EdmGen2\EdmGen2\EdmGen2\EdmGen2.cs:line 159
    at EdmGen2.EdmGen2.Main(String[] args) in c:\Users\TO101279\Desktop\EdmGen2\EdmGen2\EdmGen2\EdmGen2.cs:line 56".
    Voila le debug avec Visual Studio 2010


    #### Pour vérifier le fonctionnement simple ####
    1) J'ai créé un nouveau projet
    2) J'ai ajouter une référence vers Npgsql.dll (Add référence > browse)
    3) j'ai fait ceci

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Data;
    using Npgsql;
     
    namespace Npgsql.Connect
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
     
                NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=postgres;Password=a1b2c3d4;Database=school;");
                conn.Open();
     
                NpgsqlCommand command = new NpgsqlCommand("select * from utilisateur", conn);
                try
                {
                    NpgsqlDataReader dr = command.ExecuteReader();
                    while (dr.Read()){
                        for (var i = 0; i < dr.FieldCount; i++)
                            Console.Write("{0} \t", dr[i]);
                        Console.WriteLine();
                    }
                }
                finally{
                    conn.Close();
                }
            }
        }
    }

    Et la j'ai bien le résultat qui s'affiche dans la console.

    Quelqu'un à t'il une piste pour ne plus avoir cette erreur?
    Me manque t'il une étape?
    Est ce normal que malgré le fait que Npgsql soit dans le GAC, il faut que j'ajoute une référence dans mon projet?

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par takinelinfo Voir le message
    Est ce normal que malgré le fait que Npgsql soit dans le GAC, il faut que j'ajoute une référence dans mon projet?
    Ca me choque pas! C'est la même chose quand tu utilises SQL Server

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Ca me choque pas! C'est la même chose quand tu utilises SQL Server
    Ok merci.
    Et sinon pour mon problème de génération, quelqu'un aurait il une piste?

  4. #4
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Pour voir si ça vient du provider comme l'erreur te l'indique, je te conseillerai de tester le cas d'exemple dans le manuel utilisateur de ton provider.

    Avec une recherche Google : [ame="http://www.google.fr/search?sourceid=chrome&ie=UTF-8&q=NpgSql+factory+error#sclient=psy&hl=fr&source=hp&q=NpgSql+user+manual&aq=f&aqi=&aql=&oq=&pbx=1&bav=on.2,or.r_gc.r_pw.&fp=99db6d110053105d&biw=1145&bih=672"]Google is your friend ![/ame]

    Le premier lien donne un exemple assez complet, ça te permettra de voir d'où ça vient.
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Points : 79
    Points
    79
    Par défaut
    Bon entre temps j'ai fait différement et ça fonctionne.
    Voilà la démarche si ça intérèsse quelqu'un.

    1) Ajout du proivder dans Machine.config
    <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Framework Data Provider for PostgreSQL Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.11.91, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
    2) Ajout des DLL dans le GAC
    gacutil -i "C:\Npgsql\Npgsql.dll"
    gacutil -i "C:\Npgsql\Mono.Security.dll"
    3) Utilisation edmgen
    edmgen /mode:FullGeneration /provider:Npgsql /connectionstring:"Server=127.0.0.1;Port=5432;UserId=postgres;Password=mon_password;Database=ma_database;" /projectostgreDatabase /outcsdl:c:\Temp\PostgreDatabase.csdl /outmsl:c:\Temp\PostgreDatabase.msl /outssdl:c:\Temp\PostgreDatabase.ssdl /outobjectlayer:c:\Temp\PostgreDatabase.ObjectLayer.cs /outviews:c:\Temp\PostgreDatabase.Views.cs /language:CSharp
    4) Utilisation edmgen2
    EdmGen2.exe /ToEdmx c:\Temp\PostgreDatabase.csdl c:\Temp\PostgreDatabase.msl c:\Temp\PostgreDatabase.ssdl
    5) Création de App.config
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.data>
     
      <connectionStrings>
        <add name="PostgreDatabaseContext" connectionString="metadata=res://*/PostgreDatabase.csdl|res://*/PostgreDatabase.ssdl|res://*/PostgreDatabase.msl;provider=Npgsql;provider connection string=&quot;Port=5432;Encoding=UTF8;Server=127.0.0.1;Database=ma_database;UserId=postgres;Password=mon_password&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
    </configuration>

    6) Ajout de l'EDMX
    7) Build du projet => ok


    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [GD] Problème génération vignettes
    Par Kaimann dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 09/01/2007, 10h44
  2. Problème génération javadoc avec Eclipse
    Par pontus21 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 05/01/2007, 00h24
  3. Problème Génération fichier texte
    Par veenie dans le forum Oracle
    Réponses: 5
    Dernier message: 18/05/2006, 11h21
  4. [jsp - jasperreport] - problème génération rapport
    Par karibouxe dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 16/05/2006, 18h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo