6

F# から SQL Server Compact Edition データベースに接続しようとしていて、型プロバイダーを使用しようとしています。これは Visual Studio 11 Beta ですので、それが原因で問題が発生する可能性があることは承知していますが、まだノウハウがないだけである可能性が高いと思います。

ただし、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()

したがって、これはかなり標準的なものであり、多かれ少なかれ新しい LINQ to SQL with type provider 項目メニューからまっすぐです。

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

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

ありがとう!

4

2 に答える 2

5

この "Works on my Machine" (VS 11 ベータ版、Entity Framework を使用、こちらのチュートリアルに基づくhttp://msdn.microsoft.com/en-us/library/hh361038(v=vs.110).aspx :

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)

次への参照を追加しました: FSharp.Data.TypeProviders、System.Data.Entity、System.Data.Linq

于 2012-05-03T09:42:33.640 に答える
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
于 2012-04-16T16:09:40.527 に答える