FSharp データ プロバイダーを試していましたが、npgsql を使用して Postgresql に反対しました。そして、私は最初の行でバストしました。
SqlDataConnection を作成しようとすると、接続文字列が正しくないというメッセージでエラーがスローされます。
型プロバイダー 'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders' がエラーを報告しました: キーワードがサポートされていません: 'port:5432;database'.
ここで、Servicestack.Ormlite を使用して接続文字列とデータをテストします。それは基本的に IdbConnection を使用します。それで、接続はすべて正しいです。しかし、Type Provider が機能しない理由がわかりません。
ここにコードがあります。
//type dbSchema = SqlDataConnection<ConnectionString = "Server=localhost;Port=5432; Database=TestDB;User Id=postgres;Password=g00gle*92;" >
[<CLIMutable>]
type Person =
{ ID : int;
FirstName : string;
LastName : string }
[<EntryPoint>]
let main args =
let dbFactory =
OrmLiteConnectionFactory
(
"Server=localhost;Port=5432; Database=TestDB;User Id=postgres;Password=*****;",
PostgreSqlDialect.Provider)
use dbConnection = dbFactory.OpenDbConnection()
Console.WriteLine dbConnection.State
let persons = dbConnection.Select<Person>()
persons.ForEach(fun p -> Console.WriteLine p.FirstName)
Console.Read() |> ignore
0
上記のコードでは、最初のコメント行は機能しませんが、以下のコードは同じ設定で機能しています。つまり、問題は接続 IMHO ではなく、タイプ プロバイダーのみにあることを意味します。
他の設定を行う必要がありますか。
他に詳細が必要な場合はお知らせください。
アップデート
kvb のコメントの後、両方を試しました。これは、Web 構成で更新されたコードです。
//type dbSchema = SqlEntityConnection<ConnectionStringName = "TestDB", Provider="Npgsql">
type dbSchema = SqlEntityConnection< ConnectionStringName="TestDB" >
[<CLIMutable>]
type Person =
{ ID : int;
FirstName : string;
LastName : string }
[<EntryPoint>]
let main args =
let dbFactory =
OrmLiteConnectionFactory
(
"Server=localhost;Port=5432; Database=TestDB;User Id=postgres;Password=*******;",
PostgreSqlDialect.Provider)
use dbConnection = dbFactory.OpenDbConnection()
Console.WriteLine dbConnection.State
let persons = dbConnection.Select<Person>()
persons.ForEach(fun p -> Console.WriteLine p.FirstName)
Console.Read() |> ignore
0
そして、ここにウェブ設定があります
<system.data>
<DbProviderFactories>
<add name="Npgsql Data Provider"
invariant="Npgsql"
description="Data Provider for PostgreSQL"
type="Npgsql.NpgsqlFactory, Npgsql" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="TestDB"
connectionString="Server=localhost:5432; Database=TestDB;User Id=postgres;Password=******;"
providerName="Npgsql" />
</connectionStrings>
これがappconfigのアセンブリです。ナゲット経由で追加したので、GACにはないと思います
<dependentAssembly>
<assemblyIdentity name="Npgsql" publicKeyToken="5d8b90d52f46fda7" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.12.0" newVersion="2.0.12.0" />
</dependentAssembly>
両方の上にコメントが付けられており、コメントされていない別のものが両方とも別のエラーで失敗しています。最初のものはエラーで失敗しています
型プロバイダー 'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders' からエラーが報告されました: スキーマの読み取り中にエラーが発生しました。エラー 7001: 指定されたストア プロバイダー 'Npgsql' が構成内に見つからないか、'Npgsql' が無効です。要求された .Net Framework Data Provider が見つかりません。インストールされていない可能性があります。
2つ目はこのエラーです
型プロバイダー 'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders' からエラーが報告されました: スキーマの読み取り中にエラーが発生しました。エラー 7001: プロバイダーは ProviderManifestToken 文字列を返しませんでした。SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: 名前付きパイプ プロバイダー、エラー: 40 - SQL Server への接続を開けませんでした) ネットワーク パスが見つかりませんでした
なぜSQLサーバーを検索しているのか、まだわかりません。
さらに情報が必要な場合はお知らせください。