[EF] Génération EDMX pour Postgresql avec Npgsql via Edmgen et Edmgen2 (LinqToEntities et EntityFramework)

  • 1. Téléchargement du provider Npgsql ici, actuellement version 2.0.11.91
  • 2. Installation des DLL Npgsql dans le GAC
    Démarrer > Tous les programmes > Microsoft Visual Studio 2010 > Visual Studio Tools > lancer Visual Studio Command Prompt (2010)

    gacutil -i "c:\Npgsql\Npgsql.dll"
    gacutil -i "c:\Npgsql\Mono.Security.dll"
    

    Npgsql a été extrait dans c:\Npgsql

    gacutil va copier les DLL dans le dossier assemby de windows
    C:\WINNT\assembly (Windows XP)
    C:\Windows\assembly (Windows 7)

  • 3. Déclaration du provider Npgsql dans machine.config
    <!-- Déclaration de Npgsql -->
    <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" />
    

    dans la section ci dessous.

    <configuration>
        <system.data>
            <DbProviderFactories>
                <!-- On rajoute la déclaration ici -->
            </DbProviderFactories>
        </system.data>
    </configuration>
    

    les fichiers se trouve à l’emplacement suivant (remplacer Windows par WINNT sous Windows XP):
    – C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config
    – C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

    Si c’est une version 64 bits il y a aussi cela à modifier
    – C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config
    – C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

  • 4. Utilisation de edmgen
    #Generation des différents fichiers via Edmgen
    C:\Windows\Microsoft.NET\Framework\v3.5\edmgen /mode:FullGeneration /provider:Npgsql /connectionstring:"Server=127.0.0.1;Port=5432;UserId=postgres;Password=******;Database=blog;" /project:PostgresqlBlog /outcsdl:c:\Npgsql\PostgresqlBlog.csdl /outmsl:c:\Npgsql\PostgresqlBlog.msl /outssdl:c:\Npgsql\PostgresqlBlog.ssdl /outobjectlayer:c:\Npgsql\PostgresqlBlog.ObjectLayer.cs /outviews:c:\Npgsql\PostgresqlBlog.Views.cs /language:CSharp
    
  • 5. Téléchargement de edmgen2 à l’adresse suivante : ici
  • 6. Création de l’EDMX grâce à edmgen2
    On ouvre la solution Edmgen2 sous Visual Studio. On build (F6). On copie le dossier debug dans C:\Npgsql
    A partir de ce moment là, on exécute la commande suivante:

    #Créé le fichier .edmx à l'endroit où l'on a lancé la commande
    C:\Npgsql\Debug\edmgen2 /ToEdmx c:\Npgsql\PostgresqlBlog.csdl c:\Npgsql\PostgresqlBlog.msl c:\Npgsql\PostgresqlBlog.ssdl
    
  • 7. Création du fichier App.config
    <!--?xml version="1.0" encoding="utf-8"?-->
    <configuration>
        <connectionStrings>
            <add name="PostgresqlBlogContext" connectionString="metadata=res://*/PostgresqlBlog.csdl|res://*/PostgresqlBlog.ssdl|res://*/PostgresqlBlog.msl;provider=Npgsql;provider connection string=&quot;Port=5432;Encoding=UTF8;Server=127.0.0.1;Database=blog;UserId=postgres;Password=*******&quot;" providerName="System.Data.EntityClient" />
        </connectionStrings>
    </configuration>
    
  • 8. On ajoute le fichier edmx au projet que l’on souhaite

3 réflexions au sujet de « [EF] Génération EDMX pour Postgresql avec Npgsql via Edmgen et Edmgen2 (LinqToEntities et EntityFramework) »

  1. lorsque j’exécute l’instruction de l’étape 4, il m’affiche le message d’erreur suivant:

    « Erreur 7001: Une valeur nulle a été retournée après l’appel de la méthode <> sur une instance de fournisseur de magasins de type <>. Le fournisseur de magasins risque de ne pas fonctionner correctement. »

    que faut-il faire?

    1. je crois comprendre par l’instruction de l’étape 4. qu’il doit charger dans « C:\Windows\Microsoft.NET\Framework\v3.5\edmgen » les fichiers « c:\Npgsql\PostgresqlBlog.csdl », … or ces derniers n’existent pas.

      comment faut-il procéder?

  2. Bonjour,

    Tout d’abord merci pour votre blog, qui m’aide beaucoup. Une question, néanmoins, grâce à votre tuto j’ai réussi à utiliser EDMX pour Postgres mais quand je met à jour ma base Postgres je ne vois pas la répercussion dans visual studio. VS reste dans la « même » version de ma base lors de ma première utilisation …

    Une idée peut être ?

    Merci d’avance.

    Franck Boutboul

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.