FSharp-Datentyp-Provider für Postgresql

8

Ich habe versucht, FSharp Datenanbieter, sondern gegen die Postgresql mit npgsql. Und ich bin in der ersten Zeile kaputt gegangen.

Wenn ich versuche, SqlDataConnection zu erstellen, gibt es einen Fehler mit der Nachricht, dass die Verbindungszeichenfolge nicht korrekt ist.

  

Der Typ Provider   'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders'   hat einen Fehler gemeldet: Schlüsselwort nicht unterstützt: 'port: 5432; database'.

Jetzt teste ich Verbindungszeichenfolge und auch Daten mit Servicestack.Ormlite. Das verwendet im Grunde IdbConnection. Also, Verbindung ist alles korrekt. Aber ich weiß nicht, warum Type Provider nicht funktioniert.

Hier ist Code.

%Vor%

Im obigen Code funktioniert die erste kommentierte Zeile nicht, während bei den gleichen Einstellungen der Code funktioniert. Das heißt, das Problem ist nur mit Typ Provider nicht mit Verbindungen IMHO.

Muss ich irgendwelche anderen Einstellungen vornehmen?

Bitte lassen Sie mich wissen, wenn weitere Details erforderlich sind.

AKTUALISIEREN

Nach dem Kommentar von kvb habe ich beides versucht. Hier ist Code mit Web-Konfiguration aktualisiert.

%Vor%

Und hier ist Web-Konfiguration

%Vor%

und hier ist die Montage in appconfig. Ich denke nicht, dass es in GAC sein wird, wie ich über nuget hinzugefügt habe

%Vor%

Oben ist beides kommentiert und ein anderes, ohne das nicht kommentiert wird, versagt mit unterschiedlichem Fehler. Erster Fehler mit Fehler

  

Der Typ Provider   'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders'   hat einen Fehler gemeldet: Fehler beim Lesen des Schemas. Fehler 7001: Die angegebene   Store Provider 'Npgsql' kann nicht in der Konfiguration gefunden werden, oder   'Npgsql' ist nicht gültig. Das angeforderte .Net Framework konnte nicht gefunden werden   Datenanbieter. Es ist möglicherweise nicht installiert.

und der zweite ist mit diesem Fehler

  

Der Typ Provider   'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders'   hat einen Fehler gemeldet: Fehler beim Lesen des Schemas. Fehler 7001: Der Provider hat es getan   gibt keine ProviderManifestToken-Zeichenfolge zurück. Ein netzwerkbezogenes oder   Beim Herstellen einer Verbindung mit ist ein instanzspezifischer Fehler aufgetreten   SQL Server. Der Server wurde nicht gefunden oder war nicht erreichbar. Überprüfen   dass der Instanzname korrekt ist und für den SQL Server konfiguriert ist   Remote-Verbindungen zulassen (Anbieter: Named Pipes Provider, Fehler: 40 -   Konnte eine Verbindung zu SQL Server nicht öffnen) Der Netzwerkpfad war nicht   gefunden

Ich verstehe immer noch nicht, warum es nach SQL Server sucht.

Bitte lassen Sie mich wissen, wenn weitere Informationen erforderlich sind.

    
kunjee 25.07.2013, 09:26
quelle

2 Antworten

4

Ich werde eine Teilantwort posten, in der Hoffnung, dass jemand herausfinden kann, wie man das nächste Bit macht.

Der folgende Code wird kompiliert:

%Vor%

Für eine Tabelle test_table in der Datenbank testdb erstellt über

%Vor%

Dazu müssen Sie vier Dinge tun:

  • GAC Npgsql.dll ( "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\gacutil.exe" /i [filename] )
  • GAC Mono.Security.dll (in demselben Verzeichnis, in das Npgsql.dll von NuGet
  • heruntergeladen wurde
  • Fügen Sie die DbProviderFactory zu Ihrer .NET 4 64-Bit machine.config hinzu ( "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config" ): das ist das Gleiche, das Sie in Ihrer app.config haben, aber hinzugefügt zu dem entsprechenden Abschnitt in machine.config, meins hat einen Eintrag im Moment für Microsoft SQL Server Compact Data Provider . Denken Sie daran, das richtige öffentliche Schlüsseltoken einzubeziehen.
%Vor%
  • Starten Sie Visual Studio neu.

Jetzt wird SqlEntityConnection zur Entwurfszeit kompiliert und Sie können alle verfügbaren Tabellen sehen. Dies wird auch gerne in eine ausführbare Datei kompilieren.

Das beantwortet Ihre Frage; aber jetzt für das komische Stück, das bedeutet, dass du immer noch nicht glücklich bist. Wenn Sie diesen Code ausführen, wird ein ArgumentException ausgelöst, sobald dbSchema.GetDataContext() aufgerufen wird und sagt:

  

Die angegebene Verbindungszeichenfolge sollte entweder eine gültige anbieterspezifische Verbindungszeichenfolge oder eine vom EntityClient akzeptierte gültige Verbindungszeichenfolge sein.

Die inneren Ausnahmezustände

  

Das Schlüsselwort 'server' wird nicht unterstützt.

mit Stack-Trace

  

at System.Data.EntityClient.EntityConnectionStringBuilder.set_Item (String-Schlüsselwort, Objektwert)      bei System.Data.Common.DbConnectionStringBuilder.set_ConnectionString (String-Wert)      bei System.Data.EntityClient.EntityConnectionStringBuilder..ctor (String connectionString)      bei SqlEntityConnection1.dbSchema.GetDataContext ()

Ich habe versucht, die Verbindungszeichenfolge zu deaktivieren, damit sie funktioniert, aber ich denke, dass dies ein Fehler sein muss, wenn der Provider die Verbindungszeichenfolge zur Laufzeit oder zur Entwurfszeit erstellt. Da dieser Code in einer dynamischen Assembly ausgegeben wird, ist es nicht offensichtlich, wie Sie den Code betrachten können, um zu sehen, was vor sich geht.

    
briantyler 10.08.2013, 00:38
quelle
1

Ich habe die gleiche Schwierigkeit. Dies wird behoben, indem dies in der Datei App.config hinzugefügt wird:

%Vor%

    
user4119882 08.10.2014 05:47
quelle