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>