2013-06-03 14 views
5

Npgsql型プロバイダを使用して、F#からpostgresqlのストアドプロシージャを呼び出そうとしています。F#とNpgsqlを使用してPostgresqlでストアドプロシージャを呼び出す

open System 
open System.Data 
open System.Data.Entity 
open System.Data.Linq 
open Microsoft.FSharp.Data.TypeProviders 
open Microsoft.FSharp.Linq 
open Npgsql 
open NpgsqlTypes 

type internal dbSchema = SqlEntityConnection<ConnectionString="**my connection string**", Provider="Npgsql"> 

let internal db = dbSchema.GetDataContext() 

をしかし、私は唯一のdbタイプではなく、ストアドプロシージャのいずれかの上の表を参照してください。

現在、私は次のようにデータベースに接続されています。生のクエリ文字列を呼び出すのではなく、型プロバイダを使用して静的に型付けされたストアドプロシージャを使用する方法はありますか?

+0

私はF#etcをよく知っていますが、実際の答えはこれで分かりますが、実際にはPgにはストアドプロシージャがないという問題があります。これには、ストアドプロシージャのようにしばしば使われるセットリターン関数がありますが、実際のストアドプロシージャと 'CALL'関数はありません。 –

+0

@CraigRingerなぜタイププロバイダが強く型付けされた方法でそれらを呼び出すことができなかったのか分かりません。 – svick

+0

@svick理論的には可能ですが、実際のストアドプロシージャではないため、前記タイププロバイダを介して認識され公開されない可能性があります。 –

答えて

0

これは、npgsql、f#、npgsqltypesの間ではサポートされていないようです。あなたがこの言語を強く理解している人、それのアーキテクチャー、そしてパズルの各部分が正確にどこに頼っているのかが必要なので、ここで良い答えを得るチャンスは非常に低いです。また、何がうまくいかないかを見るためにデバッグが必要な場合もあります。

以前の提案があった。

  1. PostgreSQLは本当に手続き自体を格納していないので、F#は、それらを認識しない場合があります、と

  2. npgsqltypesマッピングにいくつかの重要な側面を欠落している可能性があります。

私は理論的には、タイププロバイダは、検索自体を行うことができるはず、ので、私はこれを見て開始する場所のNpgsqlはできないだろうと予想されます。

関連する電子メールリストを取得し、タイププロバイダに問題があると仮定して質問することをおすすめします。トラブルシューティングに十分な知識を持っている人は、おそらくそれらのメールリストに載っています。

2

私はこの質問が以前に尋ねられたことを知っていますが、SqlProviderへの参照を追加すると思いました。これは最近PostgreSQLが追加されたため、SPROCSのサポートが追加されました。

[<Literal>] 
let connStr = "User ID=postgres;Password=password;Host=POSTGRESQL;Port=9090;Database=hr;" 

[<Literal>] 
let resolutionFolder = @"D:\Downloads\Npgsql-2.1.3-net40\" 

type HR = SqlDataProvider<ConnectionString=connStr,DatabaseVendor=Common.DatabaseProviderTypes.POSTGRESQL, ResolutionPath = resolutionFolder> 
let ctx = HR.GetDataContext() 

ctx.Procedures.ADD_JOB_HISTORY(100, DateTime(1993, 1, 13), DateTime(1998, 7, 24), "IT_PROG", 60) 


//Support for sprocs that return ref cursors 
let employees = 
    [ 
     for e in ctx.Functions.GET_EMPLOYEES().ReturnValue do 
      yield e 
    ] 

解決フォルダは、NPGSQL .NETアセンブリの場所を指します。

関連する問題