Npgsql con Entity Framework

Dall'ultima versione, Npgsql2 , il .NET Data Provider per PostgreSQL , offre il supporto per Entity Framework.

Purtroppo non è ancora integrato con Visual Studio, quindi per utilizzarlo occorre eseguire direttamente edmgen.exe da linea di comando.

Ma partiamo dal principio, perchè prima di poter ottenere il nostro bel file .edmx, è necessario effettuare alcune operazioni.

  • scaricare l'ultima versione di Npgsql2, la 2.0.1 (non la 2.0.0 che aveva un piccolo problema nel reverse engineering degli schemi) per il framework 3.5 SP1, da qui;
  • estrarre i due assembly Mono.Security.dll e Npgsql.dll dove desiderate;
  • aprire il Visual Studio Command Prompt (run as Administrator se usate Vista!), posizionarsi nella cartella dove avete estratto i files, e registrarli nella GAC ( gacutil /i Mono.Security.dll | gacutil /i Npgsql.dll );
  • sempre dal Visual Studio Command Prompt (non più necessariamente come Administrator se usate Vista!) eseguire edmgen.exe per creare i files .csdl|.ssdl|.msl
    ( edmgen /provider:Npgsql /mode:fullgeneration /c:"Port=5432;Encoding=UNICODE;Server=pgsrv;
    Database=mydb;UserId=dbuser;Password=dbuser!8" /project:MyProject );
  • a questo punto vi troverete i 3 files nella cartella, per concludere l'opera, o meglio per semplificare il tutto, perchè così già si potrebbe procedere, utilizziamo l'utility edmgen2.exe (la trovate qui) per "condensare" i nostri 3 files in un unico .edmx ( edmgen2 /ToEdmx MyProject.csdl MyProject.msl MyProject.ssdl );
  • non ci resta che aggiungere il risultato dei nostri sforzi (il file .edmx) al nostro progetto Visual Studio ( che provvederà ad aggiungere i riferimenti necessari), aggiungere un file di configurazione con la connection string (o specificarla direttamente nel costruttore del context) ed il gioco è fatto;

Attenzione a specificare correttamente il path dei metadati nella stringa di connessione, altrimenti a runtime non li troverà e vi richiederà il path dei file .csdl|.ssdl|.msl; nel mio esempio dovrebbe essere circa così:

   1: <?xml version="1.0" encoding="utf-8" ?>
   2: <configuration>
   3:   <connectionStrings>
   4:     <add name="ASTRIMSWContext"
   5:          connectionString="metadata=res://*/MyProject.csdl|res://*/MyProject.ssdl|res://*/MyProject.msl;
   6:          provider=Npgsql;provider connection string='Server=localhost;
   7:          Database=mydb;Integrated Security=False;User ID=mydbuser;Password=mydbuser!8;'" 
   8:          providerName="System.Data.EntityClient" />
   9:   </connectionStrings>
  10: </configuration>

 

«November»
SunMonTueWedThuFriSat
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456