2012-04-14 11 views
6

F#からSQL Server Compact Editionデータベースに接続しようとしていて、型プロバイダを使用しようとしています。これはVisual Studio 11 Betaにあります。そのために問題が発生する可能性があることを認識していますが、まだノウハウを持っていない可能性が高いと思います。F#で型プロバイダを使用してSQL Server Compact Edition 4.0に接続する方法は?

しかし、私はMicrosoft.FSharp.Data.TypeProvidersにCE固有の型プロバイダがないことに気付きました。そして、私は通常のSqlDataConnectionがそのトリックを行うことは確信しています。

しかし、私が接続を作成しようとすると、IDEは私がCEデータベースにヒットしようとしていることを認識しているようです。だから、

、私は次のコードを持っている:

type SqlConnection = 
    Microsoft.FSharp.Data.TypeProviders 
    .SqlDataConnection<ConnectionString = @"Data Source=C:\\Path\\Database.sdf"> 
let db = SqlConnection.GetDataContext() 

だから、多かれ少なかれストレート型プロバイダアイテムメニューでSQLへの新しいLINQを追加するの外に、かなり標準です。

「プロバイダ 'System.Data.SqlServerCe.3.5'がインストールされていません」という接続文字列を取得しました。それはSql Server CEをインストールしていないという問題があることを示しているようですが、ライブラリがあり、通常のSqlCEConnectionを使用してデータベースに接続してSqlCeCommandsなどを実行できるようになっています。 4.0以降では3.5ではないので、間違ったプロバイダを探しているかどうかはわかりません。 VS 11ベータ版でデータベースを作成したので、すべてのバージョンが一致するはずです。

私は間違ったことをやっているのか、VS11ベータタイプのプロバイダライブラリがCE 4.0をまだサポートしていないのか、それが実現するために何か必要があるのか​​どうか疑問に思っています。

ありがとうございます!

答えて

5

これは、ここでのウォークスルーに基づいて、http://msdn.microsoft.com/en-us/library/hh361038(v=vs.110).aspxをVS 11ベータ、Entity Frameworkのを使用して( "私のマシン上で動作": FSharp.Data.TypeProviders、 :

open System.Data.Linq 
open System.Data.EntityClient 
open Microsoft.FSharp.Data.TypeProviders 

let connectionString = "metadata=res://*/;provider=System.Data.SqlServerCe.4.0;provider connection string='data source=C:\\Data\\SQLCE\\Test\\nw40.sdf';" 

type internal edmx = EdmxFile<"NWModel.edmx", ResolutionFolder = @"C:\Users\erik.COMMENTOR\Documents\Visual Studio 11\Projects\TestSqlCeFSharp"> 

let internal context = new edmx.nw40Model.nw40Entities(connectionString) 

query { for supplier in context.Suppliers do 
     select supplier } 
|> Seq.iter (fun supplier -> printfn "%s" supplier.Company_Name) 

はへの参照を追加しましたSystem.Data.Entity、 System.Data.Linq

+0

今日までテストする機会はありませんでした。それは巨大な助けだったので、ありがとう!私は、ここでは少なくともシンプルな例では、System.Data.EntityClientを含める必要はないこともわかりました。よりコンパクトなクエリの構文もコンテキストを実行するだけでした.Suppliers |> Seq.iter ...など – McMuttons

2
Supported info of 'System.Data.SqlServerCe.4.0' in Microsoft.FSharp.Data.TypeProviders 
1.SqlDataConnection is not 
2.DbmlFile is partial 
    type dbml = DbmlFile<_> 
    use cn = new SqlCeConnection(...) 
    use db = new dbml.DbContext(cn) 
3.EdmxFile is full 
4.SqlEntityConnection is full 
+0

これは機能の束があることを意味しますが、データ接続の設定はまだできていないと思いますか?プロバイダを入力するのは全く新しいですSQLへのLINQの新機能(exper一般的にはLINQで支えられています)。 – McMuttons