8

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サーバーを検索しているのか、まだわかりません。

さらに情報が必要な場合はお知らせください。

4

2 に答える 2